是否有可能更有效地在Java中重建String?

时间:2014-04-27 08:23:47

标签: java

我正在打破一个可能有5到8个令牌的字符串。

String [] tweet = line.split(",");
String input =tweet[1];

我想巧妙地对input进行更改,然后简单地将其替换为另一个已处理的字符串,而tweet数组中的所有内容保持不变。我可以通过形成如下字符串来执行硬编码:

tweet[0]+","+stop_word_less_tweet+","+tweet[2]+","+tweet[3]+ and so on..

但我相信有更好的方法。


我正在拆分一条推文,它可能有5-8个令牌,具体取决于它提取的主题标签。我在推文[1]中从推文文本中删除了停用词。现在,我希望能够使用新构建的stop_word_less_tweet重新构建整个推文行,以便它们在一起。

5 个答案:

答案 0 :(得分:4)

由于您只想更改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_word_less_tweet
  • tweet[2]

并且Java编译器将使用StringBuilder为您编译

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

所以你不应该遇到性能问题。

答案 1 :(得分:1)

您可能需要查看StringBuffer和StringBuilder类(http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html)。处理字符串时,它们的效率更高。您可以搜索有问题的输入,并将其替换为replace方法。

答案 2 :(得分:1)

将此用于提高效率和可读性:

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());

有用的资源:

<强> This blog

答案 3 :(得分:1)

对于性能使用StringBuilder。但只有尝试一下,如果测量表明你有问题,因为编译器实际上大部分时间都会使用它,这会让你的代码更难阅读。

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

答案 4 :(得分:1)

如果是单线程应用程序

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

如果单线程应用程序

,则字符串构建器比字符串缓冲区更快且可以使用

如果多线程继续使用stringbuffer

相关问题