在文本文件中,我有以下条目
1|002|3|Lubna|M|141021081331|
2|003|3|Rashid|1|141021081431|
3|002|3|Amal|M|141021081340|
4|002|3|Lubna|F|141021081531|
我想创建一个Java代码来检查是否存在|M|
;即意味着Lubna
正在寻找某种东西。如果Lubna
找到了她正在搜索的内容,那么在此之后进行检查,如果相同的用户名后跟|F|
,则会发生这种情况。
例如:
1|002|3|Lubna|M|141021081331| ---> Lubna is searching
1|002|3|Lubna|F|141021081531| ---> Lubna found what she was searching about
1|002|3|Amal|M|141021081340|----> Amal is searching
但是因为没有包含|F|
的记录,所以这意味着她仍在搜索..
提供记录可能是无限的,即不仅如上例所示4
所以我做的是以下内容:
String st;
// where 14 is num of columns in record , like in our examle they are 6
String [] subst= new String [14] ;
while ((st = inputStream.readLine()) != null) {
if (st.contains("|M|")) {
for (int i = 0; i < 14; i++) {
subst=st.split("[|]");
}
System.out.println(subst);
n++;
}
else
if (st.contains("|F|")) {
// System.out.println(EmailBody[j]);
}
}
在这个如果我将设法使这个不仅是一维的字符串数组,而是使它成为2,我可以搜索|F|
的存在,但问题是我无法初始化这样的这种数组,因为我不知道它的第二个维度是什么..
如果找到最简单的方法来满足我的需求,任何人都可以帮助我吗?
答案 0 :(得分:1)
"the problem is that I can't initialize such this kind of arrays because I don't know what its second dimension will be.."
您希望查看collections框架,该框架允许您在不指定大小的情况下创建列表。
所以:
ArrayList<String> list = new ArrayList<String>();
然后你可以添加stufff到列表:
list.add("stuff");
list.add("stuff2");
list.add("stuff3");
//as many time as you want
循环
for(String str : list)
{
System.out.println(str);
}
然后是其余的代码。
有关馆藏的教程,请结帐caveOfProgramming
答案 1 :(得分:0)
尝试正则表达式。但要小心大量的数据。可能很慢。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SearchDemo {
public static void main(String[] args) {
String data = "1|002|3|Lubna|M|141021081331|\n"
+ "2|003|3|Rashid|1|141021081431|\n"
+ "3|002|3|Amal|M|141021081340|\n"
+ "4|002|3|Lubna|F|141021081531|";
Pattern p = Pattern.compile("^\\d+[|]\\d+[|]\\d+[|]([^|]+)[|]([M]?)[|]\\d+[|]", Pattern.MULTILINE);
Matcher m = p.matcher(data);
while (m.find()) {
System.out.println("search name: " + m.group(1) + " type: " + m.group(2));
Pattern p2 = Pattern.compile("^\\d+[|]\\d+[|]\\d+[|](" + m.group(1) + ")[|]([F]?)[|]\\d+[|]", Pattern.MULTILINE);
Matcher m2 = p2.matcher(data);
if (m2.find()) {
System.out.println("found name: " + m2.group(1) + " type: " + m2.group(2));
} else {
System.out.println("no match name: " + m.group(1) + " type: " + m.group(2));
}
}
}
}
答案 2 :(得分:0)
像这样加载,然后迭代LinesList
String filename = "myfile.txt";
List<String> LinesList = new ArrayList<String>();
Path filePath = new File(filename).toPath();
Charset charset = Charset.defaultCharset();
try {
LinesList = Files.readAllLines(filePath, charset);
} catch (Exception e) {
if (e instanceof NoSuchFileException) {
System.out.println("error: file not found!");
} else {
e.printStackTrace();
System.exit(101);
}
}