Извлечение позиций токена из String Array - Java - PullRequest
0 голосов
/ 05 декабря 2011

Я просто спрашиваю, есть ли простой способ извлечь строку из массива строк в Java. Например, если у меня есть ввод:

String searchtext = "The one thing";
String source = "the one Thing in life is to not do in java";
String annote = "det num nn pp nn cop to neg vv pp nn";

Я хочу вывод (я не хочу использовать регулярное выражение, потому что мой текст поиска будет отличаться)

det num nn

Будет ли этот код работать ????

String searchtext = "The one thing";
String source = "the one Thing in life is to not do in java";
String annote = "det num nn pp nn cop to neg vv pp nn";
String[] annotelist = annote.split(" ");

List<String> sourcelist = Array.asList(sourcetext.split(" ")); 
search_startpt = searchlist.indexof(search[0]);

String[] searchannote = annotelist[search_startpt];
for (int j=1; j<sourcelist.length(); j++) 
  searchanote[j] = annotelist[sear_startpt+j];

System.out.println(StringUtils.join(searchannoate, " "));

Первоначально я пробовал код ниже:

import org.apache.commons.lang.StringUtils;

String searchtext = "The one thing";
String[] search  = searchtext.split(" ");
String source = "the one Thing in life is to not do in java";
String[] sourcelist  = source.split(" ");
String annote = "det num nn pp nn cop to neg vv pp nn";
String[] annotelist = annote.split(" ");

int search_startpt = 0;

for (int i=0; i<sourcelist.length(); i++) {
  if (sourcelist[i].equalsIgnoreCase(search[0])) {
    for (int j=1; j<search.length(); j++) {
      if (sourcelist[i+j].equalsIgnoreCase(search[j]) ==0) break;
      if (sourcelist[i+search.length()].equalsIgnoreCase(search[search.length()-1])) search_startpt = i;
    }
  }
}

String[] searchannote = annotelist[search_startpt];

for (int j=1; j<sourcelist.length(); j++) 
  searchanote[j] = annotelist[sear_startpt+j];

System.out.println(StringUtils.join(searchannoate, " "));

1 Ответ

1 голос
/ 05 декабря 2011

Заменить все == между строками на .equals().Пример:

if (sourcelist[i] == search[0]) {

становится

if (sourcelist[i].equals(search[0])) {

Причина в том, что когда вы split() String, все созданные String объекты являются новыми и разными, даже если их содержимое одинаково,Оператор == проверяет, что две ссылки указывают на один и тот же объект, а оператор .equals() проверяет, имеют ли два объекта одинаковое содержимое.

...