我有一串数字有点奇怪。我正在提取的源有一个非标准的格式,我正在尝试从.split切换到需要指定一个精确的方法来拆分(2个空格,3个空格等)到一个替换正则表达式。
我的数据如下:
23574 123451 81239 1234 19274 4312457 1234719
我想以
结束23574,xxxxx,xxxxx,xxxx
所以我可以在
上做一个String.split答案 0 :(得分:11)
我将使用\s
Regex
这是它在Java上的用法
String[] numbers = myString.split("\\s+");
答案 1 :(得分:3)
final Iterable<String> splitted = Splitter.on('').trimResults().omitEmptyStrings().split(input);
final String output = Joiner.on(',').join(splitted);
答案 2 :(得分:2)
String pattern = "(\s+)";
Pattern regex = Pattern.compile(pattern);
Matcher match = r.matcher(inputString);
match.replaceAll(",");
String stringToSplit = match.toString();
我认为应该为你做。如果没有,谷歌搜索java api中的Matcher和Pattern类将非常有用。
答案 3 :(得分:0)
我理解此问题是从带有空格(不仅是空格)分隔符的字符串中获取整数的一种方法。
例如,如果分隔符是TAB \t
或结尾处有\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+");
它翻译为 使用任何非数字字符序列作为可能的分隔符分割此修剪后的字符串 。