用于搜索字符串和其他相关字符串的Java代码

时间:2014-10-26 11:32:38

标签: java

在文本文件中,我有以下条目

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|的存在,但问题是我无法初始化这样的这种数组,因为我不知道它的第二个维度是什么..

如果找到最简单的方法来满足我的需求,任何人都可以帮助我吗?

3 个答案:

答案 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);
        }
    }