проблема соответствия строк? - PullRequest
0 голосов
/ 23 марта 2011

Я хочу разобрать текстовый файл. если происходит ":", то я хочу разделить массив на две части. вторая часть исследуется далее: если она содержит «in» (обратите внимание на пробел, это важно) или «out», порты массива будут заполнены. если ни «in», ни «out» не находится во второй половине исходной строки, генерики заполняются. я попробовал это с помощью следующего кода:

if (str.matches("\\:")) {
  String[] splitarray = str.split("\\:");
  if (splitarray[1].matches("in ")) {
    ports.add(str);
  } else {  
    if (splitarray[1].matches("out ")) {
      ports.add(str);
    } else {
      generics.add(str);
    }
  }
}

Ответы [ 2 ]

1 голос
/ 23 марта 2011

matches определяет, соответствует ли вся строка выражению, а не соответствует ли некоторая часть строки выражению.Для такого простого случая я бы не стал использовать регулярные выражения.Просто используйте indexOf, чтобы найти подстроку:

int indexOfColon = str.indexOf(':');
if (indexOfColon >= 0) {
    String afterColon = str.substring(indexOfColon + 1);
    int indexOfIn = afterColon.indexOf("in ");
    // you get the idea
}
0 голосов
/ 23 марта 2011

Посмотрите, поможет ли это

public static void main(String[] args) {
    // assuming only 1 occurence of ':'
    String a = "sasdads:asdadin ";
    ArrayList<String> ports = new ArrayList<String>();
    ArrayList<String> generics = new ArrayList<String>();
    if (a.contains(":")) {
        String[] strings = a.split(":");
        if (strings[1].contains("in ")) {
            ports.add(strings[1]);
        }else{
            generics.add(strings[1]);
        }
    }
    System.out.println();
}
...