java - 用艺术字符分隔的分割字符串

标签 java regex string

假设我们想编写一个方法来接收字符串中的整本书,并使用任意单字符分隔符来分隔字符串并返回字符串数组。我想出了以下实现(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() 的输入正则表达式的通用方法。有什么建议么?

最佳答案

String[] array = string.split(Pattern.quote(String.valueOf(delimiter)));

也就是说,Guava Splitter 比 String.split() 更加通用且性能良好。

关于您的方法的注释:在循环中连接到字符串的效率非常低。由于字符串是不可变的,因此它会产生大量临时字符串和 StringBuilder。您应该改用 StringBuilder。

关于java - 用艺术字符分隔的分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069113/

相关文章:

java - 我想读取实时日志文件,并想搜索我在运行时创建的某些特定关键字

java - 使用 ConstraintSet 设置 View

string - 在程序中检查输入字符串是否为路径的最佳方法是什么?

c# - 从文件名字符串中删除文件扩展名

java - 如何使用包从 flutter 中的图像读取 QR 码?

java - 数据库分布

regex - Grep/Sed 每次出现换行符后跟 bash 中的字符串

java - 用java分割字符串

JavaScript : How to not confuse regex with BB code

java - 查找字符串是否唯一