如何在Java中快速拆分字符串?

如何在Java中快速拆分字符串?,java,split,Java,Split,我必须定期与@分享我的信息。我必须用第一个@符号分开部分,但我有一些速度问题。 我可以用代码更容易地解释它: String mymessage = "java@hel@@lo @world!@@@"; String[] mysplit = fastlySeparateFunc(mymessage); System.out.println(mysplit[0]); System.out.println(mysplit[1]); /* and output must be like this :

我必须定期与@分享我的信息。我必须用第一个@符号分开部分,但我有一些速度问题。 我可以用代码更容易地解释它:

String mymessage = "java@hel@@lo @world!@@@";
String[] mysplit = fastlySeparateFunc(mymessage);
System.out.println(mysplit[0]);
System.out.println(mysplit[1]);

/*
and output must be like this :
java
hel@@lo @world!@@@
*/

我怎么写呢?fastlySeparateFunc

最快的方法是使用String.indexOf:

但我怀疑它会明显快于:

String[] mysplit = mymessage.split("@", 2);

我怀疑使用indexOf可能会稍微快一点,因为您不必使用完整的正则表达式机制。但我认为差别不大。

您可以将字符串转换为StringTokenizer对象,并在分隔符“@”处拆分它

StringTokenizer str=new StringTokenizer(mymessage,'@');

你是怎么慢慢地把它分开的?mymessage.split@,2不是做你想做的吗?按照建议使用Java标准库。这些方法随语言一起提供,并经过大量优化以获得最佳性能。@AluanHaddad:嗯,它接受字符串,但将字符串解析为正则表达式…:-String可以使用splitchar和/或splitRawString或类似的格式…我刚刚意识到,查看文档。我想知道为什么不采取一种模式……安迪·特纳非常感谢你。您的代码比传统代码快。@出于兴趣,昵称快了多少?在这种情况下快了54.95%,但随着消息长度的增加,代码的稳定性降低,并且在消息长度约为1000的情况下,它们的性能是相等的。为什么要从字符串生成字符串生成器,然后立即再次构建字符串?这与仅使用字符串完全相同,只是创建了至少1个(几乎可以肯定是2个)不必要的对象。我的错误是,我打算使用StringTokenizer,而不是StringBuilder。为使用而编辑nowStringTokenizer是一个遗留类,出于兼容性原因保留该类,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人改用String的split方法或java.util.regex包。我同意你的看法,但是stringTokenizer的实现很容易。拆分速度更快。
StringTokenizer str=new StringTokenizer(mymessage,'@');