Scanner sc = new Scanner(System.in);
System.out.println("Enter file name");
String fileName = sc.next();
String line;
Pattern p = Pattern.compile("\\d+");
Scanner s = new Scanner (new File(fileName));
while(s.hasNextLine()){
line = s.next();
Matcher m = p.matcher(line);
while(m.find()){
System.out.println(m.group());
}
}
该文件看起来像这样
---------------
aaaa bbb
//another comment
// a d 3 5
2 4 6
2 a 6
10 10
30 20
nbnb
------------
我希望它打印出每行中的数字 例如:
2 4 6
2 6
10 10
30 20
打印出每个数字,包括评论中的数字。它还在每行打印一个数字。我希望它像示例中一样打印,也跳过评论。
答案 0 :(得分:0)
我怀疑你打算使用反斜杠:
Pattern p = pattern.compile("\\d+");
自你写的表达式:
"//d+"
查找两个正斜杠,后跟至少一个字母d
...
以下代码似乎以您想要的方式运行:
public static void main (String[] args) throws java.lang.Exception
{
String s[]={"some text 123 and 234 some 456 numbers", "just text", "123 234"};
Pattern p = Pattern.compile("\\d+");
for(String ss: s) {
Matcher m = p.matcher(ss);
int flag = 0;
while(m.find()){
System.out.print(m.group() + " ");
flag = 1;
}
if(flag == 1) System.out.println();
}
}
输出:
123 234 456
123 234
注意 - 不要对每个号码使用println()
,因为它会生成换行符。相反,我在while
循环之前设置了一个标志;如果我离开循环并设置了标志,则表示字符串中有数字,我需要换行符(System.out.println();
)。否则,不需要换行符(因此仅文本行不会导致空格。)
我使用的是在线Java编译器,因此无法测试代码中的文件I / O部分 - 但我认为这应该可以帮助您......
答案 1 :(得分:0)
您可以在一行中完成所有操作:
System.out.println(s.replaceAll("\\D+", " ").trim());
这将用空格替换所有非数字序列(并从末尾删除空格)。