提取由整数和换行符分隔的字符串

时间:2014-02-18 22:59:08

标签: java

我有一个方法,它在一个字符串中返回一个DB的学生记录列表,其中每一行以换行符开头,然后是学生ID(整数),每个行以换行符结尾。它看起来像这样:

  

1 John Doe 4.0非居民史蒂夫乔布斯不适用互联网安全

     

203 Jane Doe 2.4居民比尔盖茨n / a Tree Lutz n / a

     

4343克里斯法利4.2居民B奥巴马n / a交易PEI

我需要提取学生证所要求的记录。例如,如果用户请求ID#203,程序将打印出来:

  

203 Jane Doe 2.4居民比尔盖茨n / a Tree Lutz n / a

我已经研究过模式匹配和正则表达式,但是那些似乎需要特定的字符,而且我不确定如何通过我想要的int进行解析。我无法弄清楚如何遍历字符串并抓住以请求的ID开头的那个。不要求你做我的作业,但任何提示都会受到赞赏。

3 个答案:

答案 0 :(得分:0)

如果您需要使用正则表达式,则可以使用\d标识数字或数字,并使用\n表示换行符。看看http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

答案 1 :(得分:0)

我认为你可以尝试这样的事情:

String results; //This is your list of students

String list[] = results.split("\n");

Map students<String, String> = new HashMap<String, String>();

for(String student : list){
    String splitted[] = student.split(" ",2);
    students.put(splitted[0], student);
}

您可以这样访问:

System.out.println("Info of student 203: " + students.get("203"));

希望它适合你,或者至少,给你一个想法!

答案 2 :(得分:0)

你也可以使用regex。假设学生ID之后有一个空格(或多个空格),这就是你可以做的:

int studentId = 203;

String regex = "(.|\\n)*(" + studentId + "\\s+[^\\n]+)(\\n)*(.|\\n)*";

String studentRecords = "1 John Doe 4.0 Nonresident Steve Jobs n/a Internet Security n/a\n\n203 Jane Doe 2.4 Resident Bill Gates n/a Tree Lutz n/a\n\n4343 Chris Farley 4.2 Resident B Obama n/a Trades Up PEI";

String currentStudent = studentRecords.replaceAll(regex, "$2");

System.out.println(currentStudent); 

控制台:

203 Jane Doe 2.4 Resident Bill Gates n/a Tree Lutz n/a