如何拆分字符串而不丢失 Java 中的任何单词?
How to split a string without losing any word in Java?
我正在为 Java 使用 eclipse。
我想在不丢失任何字符的情况下拆分输入行。
例如输入行是:
MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5
输出应该是:
MAC 4 USD7,MAIR 2014 USD1111,IMAC 123 USD232,MPRO 2-0-1-5
(如果我用 "M"
等拆分。字符 M
本身将被删除。)
我该怎么办?
您需要使用正向预测。
string.split("(?=M)");
或
string.split("(?<!^)(?=M)");
示例:
String totalString = "MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5";
String[] parts = totalString.split("(?=M)");
System.out.println(Arrays.toString(parts));
输出:
[MAC 4 USD7, MAIR 2014 USD1111I, MAC 123 USD232, MPRO 2-0-1-5]
更新:
下面的正则表达式将根据 USD\d+
之后存在的边界拆分输入,\d+
这里表示一个或多个数字。
String totalString = "MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5";
String[] parts = totalString.split("(?<=\bUSD\d{1,99}+)");
System.out.println(Arrays.toString(parts));
输出:
[MAC 4 USD7, MAIR 2014 USD1111, IMAC 123 USD232, MPRO 2-0-1-5]
(?<=...)
称为积极的后视断言。在支持可变长度后视 (C#
) 的语言中,您可以使用 (?<=\bUSD\d+)
。但不幸的是 java 不支持可变长度后视。所以我们定义数字,如允许 \d{1,99}
数字从 1 到 99 意味着照顾 USD
+ 数字高达 99
。并且 }
之后的 +
称为所有格量词,不会让正则表达式引擎回溯,从而匹配最大可能的值。
我正在为 Java 使用 eclipse。
我想在不丢失任何字符的情况下拆分输入行。
例如输入行是:
MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5
输出应该是:
MAC 4 USD7,MAIR 2014 USD1111,IMAC 123 USD232,MPRO 2-0-1-5
(如果我用 "M"
等拆分。字符 M
本身将被删除。)
我该怎么办?
您需要使用正向预测。
string.split("(?=M)");
或
string.split("(?<!^)(?=M)");
示例:
String totalString = "MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5";
String[] parts = totalString.split("(?=M)");
System.out.println(Arrays.toString(parts));
输出:
[MAC 4 USD7, MAIR 2014 USD1111I, MAC 123 USD232, MPRO 2-0-1-5]
更新:
下面的正则表达式将根据 USD\d+
之后存在的边界拆分输入,\d+
这里表示一个或多个数字。
String totalString = "MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5";
String[] parts = totalString.split("(?<=\bUSD\d{1,99}+)");
System.out.println(Arrays.toString(parts));
输出:
[MAC 4 USD7, MAIR 2014 USD1111, IMAC 123 USD232, MPRO 2-0-1-5]
(?<=...)
称为积极的后视断言。在支持可变长度后视 (C#
) 的语言中,您可以使用 (?<=\bUSD\d+)
。但不幸的是 java 不支持可变长度后视。所以我们定义数字,如允许 \d{1,99}
数字从 1 到 99 意味着照顾 USD
+ 数字高达 99
。并且 }
之后的 +
称为所有格量词,不会让正则表达式引擎回溯,从而匹配最大可能的值。