Поиск массива String для подстроки? - PullRequest
3 голосов
/ 26 февраля 2011

Я пытаюсь написать небольшой метод в Java, но я не могу понять это.То, что я хочу сделать, это ввести строку, а затем значение переменной int устанавливается на индекс этого в массиве, т.е. если у меня есть массив, состоящий из

[0] 'hi guys'
[1] 'this'
[2] 'is'
[3] 'sparta'

значение моего целого числа установлено на 0, и я хочу найти первое вхождение "ta", которое будет [3], поэтому я хочу, чтобы функция установила мое целое число на 3.

Что у меня естьна данный момент полностью за стеной и не так, есть ли простой способ сделать это?У меня уже есть определенная функция get (), которая возвращает значение текущей строки (т. Е. Get (0) в этом случае вернет «привет, ребята»).Кто-нибудь может мне помочь, пожалуйста?

Большое спасибо:)

 public void find(String line ) {
   boolean found = false;
   int i = cursor + 1;
   while ( found = false && i!=cursor) {
   if ((doc.get(cursor).indexOf( line ) > 0)){
  cursor = i;
  found = true;
   }else {
    cursor++;
    cursor%=doc.size();
    i++;

   }
 }
 }

Ответы [ 5 ]

2 голосов
/ 26 февраля 2011

Вы должны отметить, если это домашнее задание.

Один из способов сделать это:

    int i = 0;
    String searchTerm = "ta";

    System.out.println("Following substrings contain search term:");
    for (String s : "hi guys,this,is,sparta".split(",")) {
        if (s.contains(searchTerm)) System.out.println(i++);
        else i++;
    }

Или, если вы предпочитаете использовать регулярные выражения, измените s.contains(searchTerm) на s.matches(searchTerm).

Если это не домашняя работа, но вопрос интервью или рабочая проблема, это было бы намного более сложным.Например: аминокислотная последовательность является поисковым термином и должна найти места в ДНК / РНК, где она находится.В этом случае вам нужно более сложное решение.

Примеры:

2 голосов
/ 26 февраля 2011

Обычно я этого не делаю, но сегодня суббота, и я счастлив и, вероятно, напьюсь

public void find(String line ) {
   boolean found = false;
   int i = 0;;
   while (i < doc.size()) {
     if ((doc.get(i).indexOf( line ) > 0)){
       cursor = i;
       found = true;
       break;
     }else {
       i++;
     }
   }
   if (found) {
      // print cursor or do whatever
   }
 }
1 голос
/ 26 февраля 2011

Он говорит, что это не домашнее задание, поэтому вот оно:

(на самом деле это компилируется и работает)

    import java.io.*;

    public class A {
            public static void main(String[] args) {
                    String[] arr = {"hi guys", "this", "is", "sparta"};
                    System.out.println("enter substring:");
                    String substr = "";
                    try {
                    substr = new BufferedReader(new InputStreamReader(System.in)).readLine();
                    } catch(IOException e) {System.exit(0);}
                    for(int i =0; i<arr.length; i++) {
                            int charPos = arr[i].indexOf(substr);
                            if(charPos!=-1) {
                                    System.out.println("found in string index " + i + " at "+charPos);
                                    break;
                            }
                    }
            }
    }
1 голос
/ 26 февраля 2011

Если вы правильно поняли вашу задачу, я бы сделал что-то вроде:

public int find(String line, int startPosition) {
    if (doc[startPosition].contains(line) {
        return startPosition;
    }
    for (int i = 0; i < Math.max(doc.size() - startPosition, startPosition); i++) {
        if (startPosition - i > 0 && doc[startPosition - i].contains(line)) {
            return startPosition - i;
        }
        if (startPosition + i < doc.size() && doc[startPosition + i].contains(line)) {
            return startPosition + i;
        }

    }
    return -1;
}

Это вернул бы индекс первого элемента в массиве, который содержит подстроку, переданную в качестве параметра строки.

0 голосов
/ 26 февраля 2011

не было бы более разумно искать в реальной строке [] вместо каждой строки?

затем вы перебираете массив и возвращаете текущий индекс, если строка в этой позиции содержит подстроку.

...