java - 如何防止在java中的数组列表中存储特殊字符/*和*/之间的文本

标签 java regex arraylist java.util.scanner delimiter

我正在从文本文件中读取 pl/sql 代码,并将其所有单词存储到下面代码的数组列表中:

Scanner in1 = new Scanner(file1);
ArrayList<String> Code1 = new ArrayList<String>();
in1.useDelimiter("(\\p{javaWhitespace}|\\.|,)+");
while (in1.hasNext())
    {
        Code1.add(in1.next().toLowerCase());
    }

一切工作正常,但只要在特殊字符/* 和 */之间编写代码中的注释部分,我就会遇到问题。如下所示:

/* 
|| This is a comments section in pl/sql code...||
|| Which i don't want to store..               ||
*/

我如何修改我的代码,以便它不会存储/* 和 */之间的任何内容

最佳答案

只需添加一个替代分隔符 - 多行注释。

in1.useDelimiter("/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/|[\\p{javaWhitespace}.,]+");
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

请参阅IDEONE demo :

String s = "Some text. More, more text. /* \n|| This is a comments section in pl/sql code...||\n|| Which i don't want to store..               ||\n*/ SOME HERE";
Scanner in1 = new Scanner(s);
ArrayList<String> Code1 = new ArrayList<String>();
in1.useDelimiter("/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/|[\\p{javaWhitespace}.,]+");
while (in1.hasNext()) {
    System.out.println(in1.next().toLowerCase());
}

结果:

some
text
more
more
text

关于java - 如何防止在java中的数组列表中存储特殊字符/*和*/之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934721/

相关文章:

c# - 正则表达式在同一输入上返回不同的结果

java - 查找用户输入数组中的最小值和最大值 (Java)

java - SavedState ViewModel 使用 SavedStateViewModelFactory

java - 当客户端在 activemq 中空闲时间时删除特定队列

javascript - 最有效的 javascript 测试有效颜色值(十六进制和 RGB)并捕获颜色值

python - 重叠的正则表达式匹配

java - Else 语句不在 SQL 数据库的 while 循环内执行

java - 尝试使用 Dr.Java 打开文件时出现编译错误

java - 创建 ArrayList 并添加项目

java - 如何在文本文件中的单独行中打印数组列表