当前位置: 代码迷 >> java >> 如何用逗号分隔仅后跟字母数字字符的字符串
  详细解决方案

如何用逗号分隔仅后跟字母数字字符的字符串

热度:74   发布时间:2023-07-26 14:51:55.0

我试图通过使用BufferedReader来分隔一个非常大的.cvs(255列),该BufferedReader会抓取每行并将其存储在字符串中。

我希望能够通过命令和字母将其拆分。 例如:

1,2,3,5,6将分为
1 | 2 | 3 | 4 | 5 | 6 | 7

hello,world,good day to you, Sir,test将分为
你好 世界| 先生,祝您有美好的一天| 测试

请注意,我只分隔了一个字母数字后面的逗号。 空格前的逗号不会分隔,而是组成句子的一部分。

每串a
a.split(",(?=\\\\S)");

要用逗号分隔,后面跟字母数字字符,可以使用

String pattern = ",(?=\\p{Alnum})";

或者,如果您计划支持任何Unicode字母,请传递Pattern.UNICODE_CHARACTER_CLASS
(?U) )选项旁边的模式:

String pattern = "(?U),(?=\\p{Alnum})";

请参阅 。

Java演示:

String s = "hello,world,good day to you, Sir,test,1,2";
String[] result = s.split(",(?=\\p{Alnum})");
for (String r:result) {
    System.out.println(r); 
}

输出:

hello
world
good day to you, Sir
test
1
2

在此链接中,有一个答案解释了的用法。 我在这里留下了我认为可以解决您描述的问题的代码:

private static String[] mySplit(final String line, final char separator) {
    String regex = "((?<=(" + separator + "\\w)|(?=(" + separator + "\\w))))";
    String[] split = line.split(regex);

    List<String> list = new ArrayList<>();
    for (int i = 0; i < split.length; i++) {
        String token = split[i];
        if (token.startsWith(String.valueOf(separator))) {
            split[i + 1] = token.substring(1) + split[i + 1];
        } else {
            list.add(token);
        }
    }

    return list.toArray(new String[list.size()]);
}

private static String concatenate(final String[] tokens, final char separator){
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < tokens.length; i++) {
        builder.append(tokens[i]).append((i < tokens.length - 1) ? separator : "");
    }

    return builder.toString();
}

public static void main(String[] args) {
    final String line = "hello,world,good day to you, Sir,test";
    final String[] tokens = mySplit(line, ',');
    final String newLine = concatenate(tokens, '|');
    System.out.println("newLine = " + newLine);
}
  相关解决方案