我有一个包含数千条记录的文件,我需要根据每行的第8个字符对其进行过滤。就我而言,如果第8个字符是[a或A],我想提取该行并保存到新文件中。

我刚刚将一个简单的Java应用程序与3个项目2放在一起,其中包含我想要的数据“ 1st and 3rd”,并且可以打印到控制台,但我的匹配器无法正常工作。

我的代码示例:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidateDemo {
   public static void main(String[] args) {
      String pattern = "^.{7}([aA]{1})";

      // Create a Pattern object
      Pattern p = Pattern.compile(pattern);

      List<String> input = new ArrayList<String>();
      input.add("CARHALAALondon                     GB                         W");
      input.add("T(U   LRFonhai                     CN                         E");
      input.add("A$F   LAMuguni                     VE                         E");

      for (String ssn : input) {
         System.out.println(p + " -> " +ssn);
         if (p.matcher(ssn).matches()){
            System.out.println("Match: " + ssn);
         }

      }
  }
}


输出:

^.{7}([aA]{1}) -> CARHALAALondon                     GB  United Kingdom                       W
^.{7}([aA]{1}) -> T(U   LRFonhai                     CN  China                                E
^.{7}([aA]{1}) -> A$F   LAMuguni                     VE  Venezuela                            E


如您所见,它只会打印出第一个SYSO,任何人都知道我如何实现我想做的事情。

谢谢

G

最佳答案

您快到了-Matcher::matches attempts to match the whole string

此模式应执行您想要的操作:

String pattern = "^.{7}[aA].*";


或者(更简单,更有效):

for (String ssn : input) {
   char eighth = ssn.charAt(7);
   if (eighth == 'a' || eighth == 'A') {
      System.out.println("Match: " + ssn);
   }
}

08-16 18:13