可以更有效地在Java中重建字符串吗?

可以更有效地在Java中重建字符串吗?,java,Java,我正在断开一个可能有5到8个令牌的字符串 String [] tweet = line.split(","); String input =tweet[1]; 我想巧妙地更改输入,然后用另一个处理过的字符串替换它,而tweet数组中的所有内容都保持不变。我可以通过形成如下字符串来执行硬编码: tweet[0]+","+stop_word_less_tweet+","+tweet[2]+","+tweet[3]+ and so on.. 但我相信有更好的办法 我正在拆分一行tweet,它可能

我正在断开一个可能有5到8个令牌的字符串

String [] tweet = line.split(",");
String input =tweet[1];
我想巧妙地更改
输入
,然后用另一个处理过的字符串替换它,而
tweet
数组中的所有内容都保持不变。我可以通过形成如下字符串来执行硬编码:

tweet[0]+","+stop_word_less_tweet+","+tweet[2]+","+tweet[3]+ and so on..
但我相信有更好的办法



我正在拆分一行tweet,它可能有5-8个标记,这取决于它提取的hashtags。我在tweet[1]删除了tweet文本本身中的停止词。现在,我希望能够使用新构建的stop\u word\u less\u tweet重新构建整个tweet行,使其结合在一起。

您可能需要看看StringBuffer和StringBuilder类()。它们在处理字符串时效率更高。您可以搜索有问题的输入,并将其替换为
replace
方法。

为了提高效率和可读性,请使用此方法:

StringBuilder buffer = new StringBuilder();
buffer.append("hello, ");
buffer.append("world");
String output = buffer.toString();
就你而言:

String[] tweets = line.split(",");
StringBuilder buffer = new StringBuilder();
for (String tweet : tweets) buffer.append(tweet);
System.out.println(buffer.toString());
有用资源:


要获得性能,请使用StringBuilder。但是,只有当测量结果表明您有问题时,才尝试这样做,因为编译器实际上大部分时间都在为您使用它,这会使您的代码更难阅读


为了更好地编程,创建一个函数,将数组和元素放置在位置1上。使用for循环实现它。

因为您只想更改
tweet[1]
的内容,所以不必将文本拆分为5-8个标记。使用带限制的
split
将其拆分为3个元素,其中

  • 第一个元素将包含第一个令牌
  • 第二个元素将包含第二个标记(带有要删除的单词)
  • 第三个元素将包含剩余的令牌,如
    token3、token4、…
试一试

String [] tweet = line.split(",", 3);//
String stop_word_less_tweet = change(tweet[1]);

String result = tweet[0] + "," + stop_word_less_tweet + "," + tweet[2];
这样,
result
将始终从3个元素创建,因此您不必担心动态添加这些
5-8
标记。只需连接:

  • tweet[0]
  • stop\u word\u less\u tweet
  • tweet[2]
Java编译器将使用
StringBuilder
为您编译它

String result = new StringBuilder(tweet[0])
                .append(",")
                .append(stop_word_less_tweet)
                .append(",")
                .append(tweet[2])
                .toString();

因此,您不应该有性能问题。

如果使用StringBuilder的单线程应用程序

String [] tweets = line.split(",");
StringBuilder builder= new StringBuilder();
for (String tweet : tweets) builder.append(tweet);
System.out.println(builder.toString());
如果字符串生成器的单线程应用程序

String [] tweets = line.split(",");
StringBuilder builder= new StringBuilder();
for (String tweet : tweets) builder.append(tweet);
System.out.println(builder.toString());

如果多线程继续使用stringbuffer

,您的意思是执行速度高效还是编程简单/清晰?让我重新表述一下。我正在拆分一行tweet,它可能有5-8个标记,这取决于它提取的hashtags。我在tweet[1]删除了tweet文本本身中的停止词。现在,我想用新构建的stop_word_less_tweet重新构建整个tweet行,这样它就在一起了。我该如何解决这个问题,当然必须有更好的方法。请注意,如果不需要同步StringBuilder,它会更好。不过,正如您的链接所说,更新的JVM可以处理所有这些。我不认为stringbuilder比普通的连接更具可读性。@AliGajani然后只需循环标记并将它们附加到字符串Buffermartynas,这就是我要问的,因此问题是:)每个应用程序都是多线程应用程序。单线程或多线程并不重要。重要的是如果多个线程使用同一个StringBuilder。在16年的Java编程中,我从未遇到过这样的情况。@AliGajani:我想巧妙地修改输入。change()是进行这些巧妙更改的方法。是的,我知道了。我已经在做了,只是(“,”,3)为我做了。