4

我有一串有点奇怪的数字。我从中提取的源具有非标准格式,我正在尝试从 .split 切换,我需要在其中指定精确的拆分方法(2 个空格、3 个空格等),以替换所有正则表达式。

我的数据如下所示:

23574     123451    81239   1234    19274  4312457     1234719

我想结束

23574,xxxxx,xxxxx,xxxx 

所以我可以在 , 上做一个 String.split

4

4 回答 4

12

我将使用正则\s表达式

这是它在 Java 上的用法

String[] numbers = myString.split("\\s+");
于 2012-09-24T19:18:20.780 回答
3
final Iterable<String> splitted = Splitter.on('').trimResults().omitEmptyStrings().split(input);
final String output = Joiner.on(',').join(splitted);

与番石榴SplitterJoiner

于 2012-09-24T19:17:26.537 回答
2
String pattern = "(\s+)";
Pattern regex = Pattern.compile(pattern);
Matcher match = r.matcher(inputString);
match.replaceAll(",");
String stringToSplit = match.toString();

我认为这应该为你做。如果没有,在 java api 中搜索 Matcher 和 Pattern 类将非常有帮助。

于 2012-09-24T19:23:31.773 回答
0

我将此问题理解为一种从带有空白(不仅是空格)分隔符的字符串中获取整数的方法。

\t例如,如果分隔符是 TAB 或结尾有一个,则可接受的解决方案不起作用\n

如果我们将整数定义为数字序列,解决这个问题的最佳方法是使用简单的正则表达式。检查Java 8 Pattern API,我们可以发现它\D代表任何非数字字符:

\D  A non-digit: [^0-9]

因此,如果该String.split()方法接受带有可能分隔符的正则表达式,则很容易将其发送"\\D+"到修剪后的字符串并像这样一次性获得结果。

String source = "23574     123451    81239   1234    19274  4312457     1234719";
String trimmed = source.trim();
String[] numbers = trimmed.split("\\D+");

它被翻译为使用任何非数字字符序列作为可能的分隔符拆分此修剪后的字符串

于 2019-05-20T23:07:58.390 回答