自定义类不会过滤掉行尾字符或空格

问题描述 投票:2回答:1

可能与问题3100585模糊相关。

以下类的目的是获取包含一行Java源代码的String,并将其划分为令牌字符串,这些字符串将由单独的类进一步解析。 split方法中显示的正则表达式将字符串除以运算符字符和空格,保留所有字符,然后类遍历结果数组并删除任何空格和行尾字符。然后它将数组转换为ArrayList并返回它。

public class Lexer {

Lexer() {
}

public List<String> convertStringToTokens(String input) {
    input = input.trim();

    String[] result = input.split("(?<=[-+*\/=\s\<\>\(\)])|(?=[-+*\/=\s\<\>\(\)])");
    List<String> resultList = new LinkedList<>(Arrays.asList(result));

    for (Iterator<String> iterator = resultList.iterator(); iterator.hasNext();) {
        String string = iterator.next();
        if (string.isEmpty() || string.matches("\\u000A") ||  string.matches("\\u000D") || string.matches(" ") || string.matches("\\u000B")) {

                iterator.remove();
            }
        }

        return resultList;
    }
}

不幸的是,该课程没有履行预期的职责,这是我不确定的原因。

很可能正则表达式在这里有问题。

如果有人知道我在哪里出错,请通知并告知。

编辑:输入是单个字符串,例如“Sphere s = new Sphere(16);”。输出是字符串的ArrayList,(最多)两个字符串的长度,对于上面的输入将是

{"Sphere s = new Sphere(16",");"}.

(关闭括号与参数的分离是有意的。顺便说一下,有人知道如何将参数与左括号分开吗?)

java arrays string split removing-whitespace
1个回答
0
投票

我找到了一个解决方案:只需将空间匹配从查找断言(在问到问题后添加)移动到单独的替代匹配,我就可以删除空格字符并将字符串分开。

String[] result = input.split("(?<=[ -+*\/=\s\<\>\(\)])|(?=[ -+*\/=\s\<\>\(\)])");

String[] result = input.split("(?<=[-+*\/=\s\<\>\(\)])|(?=[-+*\/=\s\<\>\(\)])| ");
© www.soinside.com 2019 - 2024. All rights reserved.