java中有哪些选项可以拆分字符串并删除不需要的字符?
我必须将字符串分解为以下一个: 字符串输入={\1\,\2\,\3\}; 作为一个输出,我希望有一个只包含数字的字符串数组,类似于: 字符串[]输出=新字符串[]{1,2,3}; 我目前的工作方案是: String[]output=input.replaceAll\\{{124;\\}\\\,.split,; 有没有其他解决方案可以做到这一点?java中有哪些选项可以拆分字符串并删除不需要的字符?,java,string,replace,split,Java,String,Replace,Split,我必须将字符串分解为以下一个: 字符串输入={\1\,\2\,\3\}; 作为一个输出,我希望有一个只包含数字的字符串数组,类似于: 字符串[]输出=新字符串[]{1,2,3}; 我目前的工作方案是: String[]output=input.replaceAll\\{{124;\\}\\\,.split,; 有没有其他解决方案可以做到这一点? 更具可读性或相关性?您可以尝试输入.replaceAll,,.substring1,input.length-1.split\ 首先,通过将逗号替换为空
更具可读性或相关性?您可以尝试输入.replaceAll,,.substring1,input.length-1.split\
首先,通过将逗号替换为空字符串来删除字符串中的逗号,然后通过省略第一个和最后一个字符来删除括号,最后在转义撇号处拆分,尽管这可能会导致finaly数组中出现空条目,因此需要捕捉这些字符。我将考虑一个不这样做的解决方案。您可以获取所有数字,而不是删除所有特殊字符:
String input = "{\"1\",\"2\",\"3\"}";
List<String> matches = new ArrayList<>();
Matcher numberMatcher = Pattern.compile("\\d+").matcher(input);
while (numberMatcher.find()) {
matches.add(numberMatcher.group());
}
你的解决方案是最简单的。为了好玩,这里有一个解决方案,它还可以验证输入字符串的语法是否正确:
private static final Pattern OUTER = Pattern.compile("\\{(.*)\\}");
private static final Pattern INNER = Pattern.compile("\\\"(\\d+)\\\"(?:,(.*))?");
...
String input = "{\"1\",\"2\",\"3\"}";
Matcher matcher = OUTER.matcher(input);
if (!matcher.matches()) {
// Syntax error
} else {
List<String> list = new ArrayList<>();
input = matcher.group(1);
while (input != null) {
matcher = INNER.matcher(input);
if (!matcher.matches()) {
// Syntax error
} else {
list.add(matcher.group(1));
input = matcher.group(2);
}
}
String[] output = list.toArray(new String[list.size()]);
}
使用@Emre Acar建议的x.replaceAll\\D+,而不是您自己的正则表达式,可能会稍微提高可读性。
除此之外,使用split可能已经是最具可读性的方法了
我非常怀疑这比您的解决方案更具可读性,但如果您想以一种相关的奇特方式来实现这一点,您可以使用streams:
String input = "{\"1\",\"2\",\"3\"}";
String[] output = Stream.of(input)
.map(x -> x.replaceAll("\\D+", " "))
.toArray(String[]::new);
System.out.println("output: " + Arrays.toString(output));
// output: [ 1 2 3 ]
根据输入的自由度,最好将其发布在代码审查页面上。可以吗?对于您的示例和一些变体,它似乎没有问题。、、-不应该出现。对我来说,输入字符串可能重复似乎很奇怪。它看起来像JSON,但肯定不是有效的JSON对象。您是否有办法更改字符串的源,使其成为有效的JSON数组[\1\,\2\,\3\]
String input = "{\"1\",\"2\",\"3\"}";
String[] output = Stream.of(input)
.map(x -> x.replaceAll("\\D+", " "))
.toArray(String[]::new);
System.out.println("output: " + Arrays.toString(output));
// output: [ 1 2 3 ]