自定义 class 不过滤掉行尾字符或空格
Custom class does not filter out end-of-line characters or whitespace
可能与问题 3100585.
隐约相关
以下class'的目的是将包含一行Java源代码的字符串分割成标记字符串,这些标记字符串将由单独的class进一步解析。 split 方法中显示的正则表达式将字符串除以运算符字符和空格,保留所有字符,然后 class 遍历生成的数组并删除所有空格和行尾字符。然后它将数组转换为 ArrayList 并 returns 它。
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;
}
}
不幸的是,class 没有发挥预期的作用,原因我不确定。
这里很可能是正则表达式出了问题。
如果有人知道我哪里做错了,请告知并指教。
编辑:输入是单个字符串,例如 "Sphere s = new Sphere(16);"。输出是一个字符串数组列表,(最多)两个字符串长度,对于上面的输入来说是
{"Sphere s = new Sphere(16",");"}.
(右括号与参数分开是有意的。顺便问一下,有人知道如何将参数与左括号分开吗?)
我找到了一个解决方案:只需将 space 匹配项从环视断言(在提出问题后添加)移动到单独的替代匹配项,就可以删除 space 个字符并将也把它们串起来。
String[] result = input.split("(?<=[ -+*\/=\s\<\>\(\)])|(?=[ -+*\/=\s\<\>\(\)])");
变成
String[] result = input.split("(?<=[-+*\/=\s\<\>\(\)])|(?=[-+*\/=\s\<\>\(\)])| ");
可能与问题 3100585.
隐约相关以下class'的目的是将包含一行Java源代码的字符串分割成标记字符串,这些标记字符串将由单独的class进一步解析。 split 方法中显示的正则表达式将字符串除以运算符字符和空格,保留所有字符,然后 class 遍历生成的数组并删除所有空格和行尾字符。然后它将数组转换为 ArrayList 并 returns 它。
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;
}
}
不幸的是,class 没有发挥预期的作用,原因我不确定。
这里很可能是正则表达式出了问题。
如果有人知道我哪里做错了,请告知并指教。
编辑:输入是单个字符串,例如 "Sphere s = new Sphere(16);"。输出是一个字符串数组列表,(最多)两个字符串长度,对于上面的输入来说是
{"Sphere s = new Sphere(16",");"}.
(右括号与参数分开是有意的。顺便问一下,有人知道如何将参数与左括号分开吗?)
我找到了一个解决方案:只需将 space 匹配项从环视断言(在提出问题后添加)移动到单独的替代匹配项,就可以删除 space 个字符并将也把它们串起来。
String[] result = input.split("(?<=[ -+*\/=\s\<\>\(\)])|(?=[ -+*\/=\s\<\>\(\)])");
变成
String[] result = input.split("(?<=[-+*\/=\s\<\>\(\)])|(?=[-+*\/=\s\<\>\(\)])| ");