2011-02-26 128 views
3

我想在java中编写一个小方法,但我无法弄清楚。我希望能够做的就是输入一个字符串,然后一个int变量的值设置为这个阵列中的指数,也就是说,如果我有包括在字符串数组中搜索子字符串?

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

的数值数组我的整数设置为0,我想找到第一个出现的“ta”,这将是[3],所以我希望函数将我的整数设置为3.

我现在拥有的是完全脱离墙壁和错误,是否有任何简单的方法来做到这一点?我已经有一个名为get()的函数定义了返回当前行的值(即get(0)在这种情况下会返回'hi guys')。任何人都可以帮我吗?

感谢很多:)

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++; 

    } 
} 
} 
+0

这功课呢?如果是这样,你应该这样标记它。 – Wipqozn 2011-02-26 15:31:46

+0

这是功课吗? – 2011-02-26 15:32:16

+0

@steveom:你绝对是在这里的杂草,但为了帮助你,我们需要一些信息:来自你想要放入数组和搜索的文本数据在哪里?什么类型的对象是doc现在?你正在尝试阅读一个文件吗? – 2011-02-26 15:36:06

回答

1

如果正确地理解你的任务,我会做这样的事情:

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

这可能非常接近,但我认为OP需要在每行上进行子字符串搜索:从问题'找到第一个出现的“ta”,它是第三个示例条目的子字符串。 – 2011-02-26 15:40:13

+0

是的,这是正确的,保罗。我需要搜索每一行的子字符串。我遇到的主要问题是我有一个值,我们称它为i,它指向数组,并且可能指向数组中间的位置,我想遍历数组并找到最近的索引到我,到子字符串存在的数组中。对不起,以前我说不清楚! – steveom 2011-02-26 16:04:48

+0

好的,我上面实现的是搜索一个子字符串,所以我不确定Paul在说什么。现在它返回数组中的_first_索引,该索引对应于包含作为参数传递的子字符串的字符串,而似乎应该有另一个参数,并且索引应该是与该参数值最接近的那个。在这种情况下,算法需要调整,我将适当地编辑我的原始代码。 – 2011-02-26 16:10:35

2

通常我不这样做,但今天是星期六,我很高兴,并可能将喝醉

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 
    } 
} 
0

我就不会是更理智搜索实际的字符串[]而不是每一行?

然后循环遍历数组并返回当前索引,如果此位置的字符串包含子字符串。

2

你应该注意这是否是家庭作业。要做到这一点

一种方法是:

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)

如果这不是家庭作业,但面试问题或工作问题,这将是非常复杂的。例如:氨基酸序列是搜索词,需要找到它所在的DNA/RNA位置。那样的话你需要更复杂的解决方案。

实例:

1

他说,这不是功课,所以在这里它是:

(此其实编译和工作)

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; 
          } 
        } 
      } 
    }