Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中有哪些选项可以拆分字符串并删除不需要的字符?_Java_String_Replace_Split - Fatal编程技术网

java中有哪些选项可以拆分字符串并删除不需要的字符?

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\ 首先,通过将逗号替换为空

我必须将字符串分解为以下一个:

字符串输入={\1\,\2\,\3\}; 作为一个输出,我希望有一个只包含数字的字符串数组,类似于:

字符串[]输出=新字符串[]{1,2,3}; 我目前的工作方案是:

String[]output=input.replaceAll\\{{124;\\}\\\,.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 ]