Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提取由整数和换行符分隔的字符串_Java - Fatal编程技术网

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

Java 提取由整数和换行符分隔的字符串,java,Java,我有一个方法,它以单个字符串的形式从数据库返回一个学生记录列表,其中每行以换行开始,然后是学生ID(整数),每行以换行结束。它看起来像这样: String results; //This is your list of students String list[] = results.split("\n"); Map students<String, String> = new HashMap<String, String>(); for(String studen

我有一个方法,它以单个字符串的形式从数据库返回一个学生记录列表,其中每行以换行开始,然后是学生ID(整数),每行以换行结束。它看起来像这样:

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"));
1 John Doe 4.0非居民Steve Jobs不适用互联网安全不适用

203无名氏2.4居民比尔·盖茨不适用Tree Lutz不适用

4343 Chris Farley 4.2居民B奥巴马n/a向上交易PEI

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

203无名氏2.4居民比尔·盖茨不适用Tree Lutz不适用


我已经研究了模式匹配和正则表达式,但它们似乎需要特定的字符,我不确定如何按我想要的int进行解析。我不知道如何在字符串中循环并仅获取以请求的ID开头的字符串。我不要求您做家庭作业,但任何提示都将不胜感激。

如果您需要使用正则表达式,您可以使用
\d
来识别数字或数字,并使用
\n
来换行符。看看

我想你可以试试这样的东西:

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"));

希望它对你有用,或者至少能给你一个想法

您也可以使用
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

你必须使用正则表达式吗?为什么不将字符串按换行符拆分为一个数组,并返回以您要查找的数字开头的字符串(加上一个空格,这样您就不匹配2033)。