您可以为使用一个或另一个更好,更快,更正确的变体提供什么参数.
第一个变种:
StringBuffer sql = new StringBuffer("SELECT DISTINCT f.ID ")
.append("FROM FIRST_TABLE F ")
.append("LEFT JOIN SECOND_TABLE s ON f.ID = s.F_ID ")
.append("WHERE ")
.append("F.BOOL = 1 ")
.append("AND S.DATE IS NOT NULL ")
.append("AND S.CLOSED = 0 ");
Run Code Online (Sandbox Code Playgroud)
第二种变体:
String sql = "SELECT DISTINCT f.ID " +
"FROM FIRST_TABLE F " +
"LEFT JOIN SECOND_TABLE s ON f.ID = s.F_ID " +
"WHERE "
"F.BOOL = 1 " +
"AND S.DATE IS NOT NULL " +
"AND S.CLOSED …Run Code Online (Sandbox Code Playgroud) 我的Android程序中有一个很长的字符串.我需要的是,我需要拆分该字符串的每个单词并将每个单词复制到一个新的字符串数组.例如:如果字符串是"我做了android程序"而字符串数组名为my_array,则每个索引应包含如下值:
my_array[0] = I
my_array[1] = did
my_array[2] = Android
my_array[3] = Program
Run Code Online (Sandbox Code Playgroud)
我做的程序的一部分看起来像这样:
StringTokenizer st = new StringTokenizer(result,"|");
Toast.makeText(appointment.this, st.nextToken(), Toast.LENGTH_SHORT).show();
while(st.hasMoreTokens())
{
String n = (String)st.nextToken();
services1[i] = n;
Toast.makeText(appointment.this, st.nextToken(), Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以提出一些想法..
为什么StringBuilders比普通的String Concatenation更好用?
我读过一些关于append()的文章比+快得多,但是原因是什么,为什么我们会使用+ over append()呢?谢谢!
我在Java书中读过:
因为a
String是不可变的,使用StringBuffer效率更高.
我知道String实例是不可变的.
我也明白,StringBuffer使处理字符串比正常情况更有效.
但是我无法解决的问题是连接这两个概念的原因,即String不可变的帮助是StringBuffer什么?
谢谢 :)
我可以用两种方式实现单一方法,
1.
public String getTestMessage()
{
return "Hello" + "World..!";
}
Run Code Online (Sandbox Code Playgroud)
2.
public String getTestMessage()
{
return new StringBuffer("Hello").append("World..!").toString();
}
Run Code Online (Sandbox Code Playgroud)
在第一个场景中,String将创建两个新对象.
在第二个场景中,还会创建两个新对象,但会有一个String和StringBuffer.现在方式会很快吗?我有点困惑.
在过去,我一直认为你应该使用StringBuilder和append(String)构建带变量的字符串,而不是string += split[i].在什么情况下这是准确的?我问,因为通常,如果我要写下面的内容:
String[] split = args; // command line arguments or whatever
String myString = "";
for (int i = 0; i < split.length; i++) {
myString += split[i];
}
Run Code Online (Sandbox Code Playgroud)
我的IDE告诉我它应该转换为使用StringBuilder.但是,写这样的东西:
StringBuilder build = new StringBuilder();
build.append("the ").append(build.toString()).append(" is bad").append(randomvar);
build.toString();
Run Code Online (Sandbox Code Playgroud)
当我应该使用String时,IntelliJ实际上使用StringBuilder列为性能问题.它被列为性能问题的事实表明它实际上可能导致问题,而不是仅仅是一点点慢.
我注意到第一个例子是一个循环,第二个例子不是 - 是一个建议用于大量连接的StringBuilder,但是正常连接对于非循环情况更好(这也意味着在循环中运算符+=将被使用,而在外部它可能是一个循环"the " + build.toString() + " is bad" + randomVar- 是+ =问题而不是+?)
我在一个循环中连接一个字符串,但它需要很长时间,为什么呢?
for (String object : jsonData) {
counter++;
finalJsonDataStr += object;
}
Run Code Online (Sandbox Code Playgroud)
变量object是一块JSON,最多70个字符,循环大约50k次.
我理解一些人的建议StringBuffer,StringBuilder但是这个链接说,它没有性能改进:StringBuilder vs Java中toString()的字符串连接
我做了一个性能测试
String test="";
Date st = new Date();
logger.info("start "+(new Date()).toString());
for(int i = 0;i<100000;i++) {
test += "test";
}
logger.info("end "+(new Date()).toString());
test="";
StringBuilder sb = new StringBuilder(test);
logger.info("start Sb "+(new Date()).toString());
for(int i = 0;i<100000;i++) {
sb.append("test");
}
test = sb.toString();
logger.info("end sb "+(new Date()).toString());
Run Code Online (Sandbox Code Playgroud)
结果是
start Fri Jun 30 10:34:42 KRAT 2017
end Fri Jun 30 10:34:55 KRAT 2017
start Sb Fri Jun 30 10:34:55 KRAT 2017
end sb Fri Jun 30 10:34:55 KRAT 2017
Run Code Online (Sandbox Code Playgroud)
相差13秒!!!
但我到处都看到“+”运算符更快的标语,因为从 …
我正在做一个相对简单的文件读取,并且我在输入值和从平面文件读取并存储在数组中的数据值之间的验证中遇到了异常.我已经将错误追踪到了firstName现场.我将此字段定义为等于array[0].While array[0]在我的输出中完美显示,fieldName不...它是空白或空.
这是我的代码,带有输出样本.
我不确定Stringbuilder这里是否最适合使用?或者其中一个深层String方法?我试过的一切似乎都没有用.我错过了什么...我知道这是我看不见的明显的东西.
public class DisplaySelectedNumbers
{
public static void main(String[] args)
{
final String FN = " ";
final String LN = " ";
final String PHONE = "0000000000";
String delimiter = ",";
String s = FN + delimiter + LN + delimiter + PHONE + System.getProperty("line.separator");
final int RECSIZE = s.length();
String[] array = new String[3];
Scanner kb = new Scanner(System.in);
Path file = Paths.get("PhoneList.txt");
String fName …Run Code Online (Sandbox Code Playgroud)