假设我们想编写一个方法来接收字符串中的整本书和一个任意的单字符分隔符来分隔字符串并返回一个字符串数组。我提出了以下实现(Java)。(假设没有连续的分隔符等)
ArrayList<String> separater(String book, char delimiter){
ArrayList<String> ret = new ArrayList<>();
String word ="";
for (int i=0; i<book.length(), ++i){
if (book.charAt(i)!= delimiter){
word += book.charAt(i);
} else {
ret.add(word);
word = "";
}
}
return ret;
}
问题:我想知道是否有任何方法可以利用String.split()获得更短的解决方案?因为我找不到为任意字符分隔符定义一般正则表达式的一般方法。
String.split("\\.") if the delimiter is '.'
String.split("\\s+"); if the delimiter is ' ' // space character
那个测量我很冷,没有找到从输入字符分隔符生成方法split()的输入正则表达式的一般方法。有什么建议?
答案 0 :(得分:2)
String[] array = string.split(Pattern.quote(String.valueOf(delimiter)));
那就是说,Guava Splitter比String.split()
更通用,性能更好。
关于你的方法的注释:在循环中连接到一个String是非常低效的。由于字符串是不可变的,它会产生许多临时字符串和StringBuilders。您应该使用StringBuilder。