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

可能与问题3100585模糊相关。自定义类不会过滤掉行尾字符或空白

以下类的目的是获取包含一行Java源代码的字符串,并将其划分为将由单独的类进一步分析的令牌字符串。 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",");"}. 

(右括号的分离形成参数意图。顺便说一下,会有人知道如何将参数与左括号分开?)

回答:

我找到了一个解决方案:只是将空间匹配从lookaround断言(在提问后添加)移动到单独的替代匹配,允许我删除空格字符和将字符串也分开。

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

成为

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

以上是 自定义类不会过滤掉行尾字符或空白 的全部内容, 来源链接: utcz.com/qa/265157.html

回到顶部