首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用line.contains查找精确字符串

使用line.contains查找精确字符串
EN

Stack Overflow用户
提问于 2017-08-22 18:29:59
回答 3查看 49关注 0票数 0

如果有些信息被认为缺乏知识,那么很抱歉,刚刚开始学习Java。

在这个工作中,用户搜索道路和城镇。问题是,当搜索类似于“Cabramatta”的结果时,结果“Cabramatta West”也会出现在结果中。

正在阅读的信息格式如下:

威廉街^3^3503^柯林斯街

威廉街^3^3503^柯林斯街

代码语言:javascript
复制
 while(fileName.hasNext())
     {
        String line =fileName.nextLine();
        {
        if(line.contains(suburbInput) && line.contains(roadInput))
           {
              String tramDetails[] = line.split("\\^");
              String crossStreet = tramDetails[0];
              String stopNumber = tramDetails[1];
              int stopNumberInt = Integer.parseInt(stopNumber);
              String trackerID = tramDetails[2];
              int trackerIDInt = Integer.parseInt(trackerID);
              String roadName = tramDetails[3];
              String suburbName = tramDetails[4];

System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet + " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n");

我怎样才能在搜索时找到“Cabramatta”的结果,但在搜索“Cabramatta West”时也能找到结果呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-22 18:45:17

在检查之前,您必须拆分您的输入,以便可以使用.equals而不是.contains。

代码语言:javascript
复制
while(fileName.hasNext())
 {
    String line =fileName.nextLine();
    String tramDetails[] = line.split("\\^");
    String suburbName = tramDetails[4];
    String roadName = tramDetails[3];

    if(suburbName.equals(suburbInput) && roadName.equals(roadInput))
    {

          String crossStreet = tramDetails[0];
          String stopNumber = tramDetails[1];
          int stopNumberInt = Integer.parseInt(stopNumber);
          String trackerID = tramDetails[2];
          int trackerIDInt = Integer.parseInt(trackerID);

          System.out.print("'Suburb': " + suburbName 
                            + " 'Road': " + roadName 
                            + " 'Cross Street': " + crossStreet   
                            + " 'Stop': " + stopNumberInt 
                            + " 'Tracker ID': " + trackerIDInt + "\n");
    }
票数 0
EN

Stack Overflow用户

发布于 2017-08-22 18:43:44

先拆分,然后只使用equals方法的String。下面是一个测试代码:

代码语言:javascript
复制
        String line = "William Street^3^3503^Collins Street^Cabramatta West";
        String suburbInput = "Cabramatta";
        String roadInput = "Collins Street";

        String tramDetails[] = line.split("\\^");
        String crossStreet = tramDetails[0];
        String stopNumber = tramDetails[1];
        int stopNumberInt = Integer.parseInt(stopNumber);
        String trackerID = tramDetails[2];
        int trackerIDInt = Integer.parseInt(trackerID);
        String roadName = tramDetails[3];
        String suburbName = tramDetails[4];

        if (suburbInput.equals(suburbName) && roadInput.equals(roadName))
            System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet
                    + " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n");

        suburbInput = "Cabramatta West";

        if (suburbInput.equals(suburbName) && roadInput.equals(roadName))
            System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet
                    + " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n");

和产出:

代码语言:javascript
复制
'Suburb': Cabramatta West 'Road': Collins Street 'Cross Street': William Street 'Stop': 3 'Tracker ID': 3503

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2017-08-22 18:44:25

您可以在郊区使用String#endsWith()而不是String#contains()

代码语言:javascript
复制
if (line.endsWith(suburbInput) && line.contains(roadInput))

当然,这只是个创可贴。'Cabramatta‘仍将与'West’匹配。问题是,随着if (...)语句的实现,只能找到可能的匹配。您需要将行解析为要匹配的确切字段,然后显式地测试这些字段。

或者(大锤方法),您可以实现一个正则表达式匹配器,它将在一次执行中完全匹配所有内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45824608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档