只是文件中的数字

时间:2014-01-25 00:43:42

标签: java

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

打印出每个数字,包括评论中的数字。它还在每行打印一个数字。我希望它像示例中一样打印,也跳过评论。

2 个答案:

答案 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());

这将用空格替换所有非数字序列(并从末尾删除空格)。