我正在打破一个可能有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重新构建整个推文行,以便它们在一起。
答案 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)
如果是单线程应用程序
,请使用StringBuilderString [] tweets = line.split(",");
StringBuilder builder= new StringBuilder();
for (String tweet : tweets) builder.append(tweet);
System.out.println(builder.toString());
如果单线程应用程序
,则字符串构建器比字符串缓冲区更快且可以使用如果多线程继续使用stringbuffer