如何跳过文本文件中的某些输入

时间:2018-04-12 22:09:37

标签: java file-io filter

我正在尝试接收一个类似于以下内容的文件(但还有数百行):

#!/bin/bash -e

cd datafiles
mkdir ../done

for f in $(find . -type f); do
    echo $f
    mysql -h <myhost> -u <myuser> --password=<myuserpassword <mydb> -e "LOAD DATA LOCAL INFILE '${f}' INTO TABLE <mytable> ignore 1 lines"
    mv $f ../done/
done

cd ..

123,000,“带空格的单词”的东西每行都不一样。我只是想把它展示为我需要的占位符。

如果我只需要获取每行的123,我怎么能忽略那里的其他东西呢?

以下是我的尝试:

  123 000 words with spaces 123 123 123 words with spaces
  123 000 and again words here 123 123 123 and words again

有没有办法跳过“000's”和“带空格的单词”这样的东西我只接受“123”?或者我只是以“糟糕”的方式接近这个。谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式去除行的第一部分。

String cleaned = in.nextLine().replace("^(\\d+\\s+)+([a-zA-Z]+\\s+)+", "");

^表示模式从文本的开头(行的开头)开始

(\\d+\\s+)+匹配一个或多个数字组,后跟空格。

([a-zA-Z]+\\s+)+匹配一组或多组字母字符,后跟空格。

如果有标点符号或其他字符,您可能需要修改模式。如果您不熟悉正则表达式here,可以阅读更多相关内容。

答案 1 :(得分:1)

逐行抓取并在一个空格周围分割线并迭代字符串数组,只关注数组中的字符串是否符合您的要求

int countsOf123s = 0;
while (in.hasNextLine())
{
    String[] words = in.nextLine().split(" "); //or for any whitespace do \\s+
    for(String singleWord : words)
    {
        if(singleWord.equals("123"))
        {
            //do something
            countsOf123s++;
        }
    }
}