在Java应用程序中工作时,我最近需要组装一个以逗号分隔的值列表,以传递给另一个Web服务,而无需事先知道有多少元素.我能想出的最好的东西是这样的:
public String appendWithDelimiter( String original, String addition, String delimiter ) {
if ( original.equals( "" ) ) {
return addition;
} else {
return original + delimiter + addition;
}
}
String parameterString = "";
if ( condition ) parameterString = appendWithDelimiter( parameterString, "elementName", "," );
if ( anotherCondition ) parameterString = appendWithDelimiter( parameterString, "anotherElementName", "," );
Run Code Online (Sandbox Code Playgroud)
我意识到这不是特别有效,因为在整个地方都会创建字符串,但我的目的是为了清晰而不是优化.
在Ruby中,我可以做这样的事情,感觉更优雅:
parameterArray = [];
parameterArray << "elementName" if condition;
parameterArray << "anotherElementName" if anotherCondition;
parameterString = parameterArray.join(",");
Run Code Online (Sandbox Code Playgroud)
但由于Java缺少连接命令,我无法弄清楚任何等价物.
那么,在Java中执行此操作的最佳方法是什么?
我想从sdcard文件路径获取文件名.例如:/storage/sdcard0/DCIM/Camera/1414240995236.jpg I want get 1414240995236.jpg
我已经编写了代码来获取相同的但它无法正常工作.请帮忙.
以下是我的代码:
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data)
{
if ( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if ( resultCode == RESULT_OK) {
/*********** Load Captured Image And Data Start ****************/
String imageId = convertImageUriToFile( imageUri,CameraActivity);
// Create and excecute AsyncTask to load capture image
new LoadImagesFromSDCard().execute(""+imageId);
/*********** Load Captured Image And Data End ****************/
} else if ( resultCode == RESULT_CANCELED) {
Toast.makeText(this, " Picture was not taken ", Toast.LENGTH_SHORT).show();
} …Run Code Online (Sandbox Code Playgroud) 这是场景:我有一个WakefulBroadcastReceiver,它可以备份到网络计算机或云端.当我知道平板电脑可以访问局域网时,它将在半夜开始运行.备份将使用存储访问框架将数据存储到由实例化WakefulBroadcastReceiver的片段"拾取"的位置和文件.所以我需要能够访问ContentResolver,为此我需要上下文.
从我对文档的所有阅读中,这就是BroadcastReceiver的用途 - 一个潜在的长期运行任务,应该在后台完成,而不会发生太多其他事情. - 像备份一样.我还没有看到任何将所有内容放在一起的例子.
如何在IntentService中获取上下文?这是接收器和调度服务的片段.
public class BackupAlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, BackupSchedulingService.class);
startWakefulService(context, service);
}
}
public class BackupSchedulingService extends IntentService {
public BackupSchedulingService() {
super("BackupSchedulingService");
}
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
// How to get the context - it was a parameter when
// creating the new IntentService class above?
}
}
Run Code Online (Sandbox Code Playgroud)
示例代码几乎完全遵循Android参考手册代码:
https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html
最近我的jenkins.log开始变得非常庞大,非常快,充满了关于DNS解析的例外.我试图使用logrotate,但是日志文件增长太快甚至不能旋转,只是占用了我所有的磁盘空间,这会导致各种服务失败,因为它们不能再写文件了.
我该如何避免?
我在学习Spring Boot时遇到了一些编码问题; 我想添加像Spring 3.x这样的CharacterEncodingFilter.像这样:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud) 虽然返回类型不是方法签名的一部分,但JVM会查找精确的声明
public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)
我的假设是,由于方法签名没有包含"返回类型",我必须允许更改返回类型.
但是,如果我将其更改为public static int main(String[] args)并返回一个值,假设为0,则JVM无法执行程序并退出并显示错误
Error: Main method must return a value of type void in class TestData, please
define the main method as:
public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)
为什么Java规范要求主方法只是无效?当返回类型不是方法签名的一部分时,为什么会出现此限制?
这个问题与为什么java中的main()不同?:这个问题是关闭的,因为它是基于意见的,而我正在寻找JVM调用此方法的代码位置/进程,以及强制它们将此方法保持为空的限制.他们采取了哪些设计决策(以及背后的推理),以及它在哪里记录.
我正在寻找事实,以便知道为什么会这样做.如果不仔细阅读问题的详细信息,请不要将其标记为重复.
PS:退出,是另一回事.我更关心该计划的进入.此外,返回的值可能不是使用JVM,而是将其限制为void可扩展性.
到目前为止,我从这个问题中学到的是:Java规范明确地修复了返回类型,以避免混淆迁移程序员(C/CPP),他们可能期望这个值返回到操作系统,但由于JVM介于此之间,因此该值永远不会返回OS.为了这个特殊目的(返回OS的值),他们提供了System.exit()方法.
对于那些建议返回类型是签名的人 - 只是尝试在类中定义以下两种方法
public static void main(String[] a){
}
public static String main(String[] a){
}
Run Code Online (Sandbox Code Playgroud)
您将收到编译错误,因为这两种方法的签名是相同的.
我在其他语言中看到了一些与此相关的问题,并对此进行了相当多的研究.首先,在我们开始走下兔洞之前,我必须说明我为什么这样做.我正在打印一个二叉树,我找到了一种方法来做到这一点,我认为没有其他人找到它(在网上的任何地方找不到它我永远搜索过).它解决了很多与间距和冲突有关的问题,我可能会在以后提供它作为Prettyprint Btree问题的答案.无论如何,执行上述操作的一个重要部分是能够将换行符(光标)向上移动一行.我也会安排将一个回车移动一行.
我已经对这个名为"编辑1-3"的问题进行了三次编辑.
我的特定Windows版本(可能相关):Windows 10 v1607操作系统版本:14393.2035
问题是使用ANSI转义字符很容易完成
ANSI转义码:https://en.wikipedia.org/wiki/ANSI_escape_code
使用"\ 033 [A"是我想要实现的特定代码(从有关在python中移动一行的问题得到它).
所以问题解决了吗?哦不,甚至不接近.该问题是,显然窗户上挂着这个""" 精彩 '’"更新,可能有破产一切ANSI /控制台有关.下面链接到有关此问题,但具有不同的ANSI要求,但根本问题是相同的.
如何使用System.out.println在控制台中打印颜色?
tl:dr由于某些原因它不适用于Windows,你需要一个大型库来执行此操作或其他操作.
Sooo然后我尝试对更新本身做一些深入的研究,为什么这恰好是特定于Windows的(当然),我被引导到了这一点.
Windows问题的根本原因:https://github.com/Microsoft/WSL/issues/1173
tl; dr:基本上,更新更改了cmd.exe的默认设置,cmd.exe是java使用的默认控制台.更改的是如何为'子应用程序'AKA java处理ANSI代码的控制台设置(使用控制台但不是控制台本身的东西).默认值在更新之前,子应用程序继承了启用ANSI的默认控制台.现在(因为显然以前的默认设置破坏了东西)他们改变了它,以便子应用程序不从控制台继承默认设置.这意味着如果java想要启用ANSI,java必须自己有效地设置此控制台模式.显然有大量的libary用于java命令,但是有很多可用的库存有一些问题.首先他们需要maven,我不想要maven,我也不喜欢 喜欢需要一百万个额外的库来做一些非常简单的事情,它增加了我的代码依赖的东西(这很糟糕).所以我试图避免像"只使用JANSI"这样的简单解决方案setConsoleMode 对于ANSI.
在我完成阅读/理解后,我尝试进入我的注册表编辑器并尝试更改控制台的默认设置(cmd.exe),以便始终为子应用程序启用ANSI(AKA java).有人在github讨论中提出过建议,但令我惊讶的是,具体设置对我来说并不存在.(它应该在计算机 - > HKEY_CUURENT_USER - >"TrimLeadingZeros"和"WindowAlpha"之间的控制台中).
由于我无法编辑控制台设置而没有大型库充满了我不想要的东西,我尝试在盒子外面思考并且在java设置中搞砸了.我发现java确切地设置了它的控制台,并发现我可以更改该设置以在java中使用不同的控制台.我最近安装了git,并且知道git bash可用,所以我尝试使用下面的问题(以及谷歌一般)作为起点.
https://superuser.com/questions/1196463/start-sh-exe-bash-with-given-path
我无法找到合适的工作.它没有返回任何错误或做任何新的事情,就像所有.它甚至被设置为'当前项目',所以当我运行我的项目时,它应该做些不同的事情吗?我相信问题的一部分是我的根git文件夹是搞乱的(不在程序文件中).这可能是因为我使用的计算机是一台工作计算机,也许某些设置会影响安装git的位置,我不知道但我知道的是当我更改控制台时我尝试了这条路径:
C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\BIN\bash.exe
我也尝试过:
C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\bash.exe
和
C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\BIN\sh.exe
和
"C:\ Users\abbotts1\AppData\Local\Programs\Git\bin\sh.exe"--login -i
每次更改控制台后我都试过这段代码:
public class ExpressionEvaluator {
public static void main(String[] args) {
System.out.println("1"); …Run Code Online (Sandbox Code Playgroud) 我在WinForms应用程序上有一个组合框,其中可以选择一个项目,但它不是必需的.因此,我需要一个'Empty'第一项来表示没有设置任何值.
组合框绑定到从存储过程返回的DataTable(我没有在我的UI控件上为匈牙利表示法道歉:p):
DataTable hierarchies = _database.GetAvailableHierarchies(cmbDataDefinition.SelectedValue.ToString()).Copy();//Calls SP
cmbHierarchies.DataSource = hierarchies;
cmbHierarchies.ValueMember = "guid";
cmbHierarchies.DisplayMember = "ObjectLogicalName";
Run Code Online (Sandbox Code Playgroud)
我怎么能插入这样一个空项目?
我有权更改SP,但我真的不想用UI逻辑"污染"它.
更新:这是我已经空白的DataTable.NewRow(),谢谢.我已经对你进行了修改(无论如何都是3个答案).在决定'回答'之前,我试图让迭代器模式工作
更新:我认为这个编辑让我进入了社区Wiki的土地,我决定不指定单个答案,因为它们都有其领域背景的优点.感谢您的集体投入.
我通过Hibernate将用户保存在数据库表中,我使用Spring Security进行身份验证:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.configuration.*;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
Run Code Online (Sandbox Code Playgroud)
这很有效,但有一点 - 用户在服务器启动时加载.我需要编写方法RegisterUser(用户用户),在运行时将新用户添加到Spring Security.此方法应仅关注此任务.我不知道如何开始实现此功能,所以感谢任何建议!;)
Ofc用户有登录,密码,角色等等字段...
请不要使用Spring MVC发布解决方案.该系统是使用版本4.0.x中的Spring Web Boost和Spring Security Boost的RESTful应用程序
我创建了这个Annotation类
这个例子可能没有意义,因为它总是抛出一个异常,但我仍在使用它,因为我只是想解释我的问题是什么.我的注释永远不会因某些原因而被调用?
public class AuthenticationRequired : System.Attribute
{
public AuthenticationRequired()
{
// My break point never gets hit why?
throw new Exception("Throw this to see if annotation works or not");
}
}
[AuthenticationRequired]
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// My break point get here
}
Run Code Online (Sandbox Code Playgroud) java ×3
android ×2
c# ×2
annotations ×1
ansi ×1
combobox ×1
encoding ×1
io ×1
jenkins ×1
jvm ×1
maven ×1
persistence ×1
registration ×1
return-type ×1
spring ×1
spring-boot ×1
string ×1