Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字符串数组中搜索子字符串?_Java_Arrays_String_Search_Indexof - Fatal编程技术网

Java 在字符串数组中搜索子字符串?

Java 在字符串数组中搜索子字符串?,java,arrays,string,search,indexof,Java,Arrays,String,Search,Indexof,我正试图用java编写一个小方法,但我想不出来。我希望能够做的是输入一个字符串,然后将int变量的值设置为数组中该变量的索引,即如果我有一个由 [0] 'hi guys' [1] 'this' [2] 'is' [3] 'sparta' 我的整数的值设置为0,我想找到第一个出现的“ta”,它将是[3],因此我想让函数将我的整数设置为3 我现在的一切完全是离谱的,错了,有没有简单的方法来做?我已经定义了一个名为get()的函数,该函数返回当前行的值(即在本例中get(0)将返回“hi guys”

我正试图用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 = 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
   }
 }
public void find(字符串行){
布尔值=false;
int i=0;;
而(i0)){
游标=i;
发现=真;
打破
}否则{
i++;
}
}
如果(找到){
//打印光标或执行任何操作
}
}

在实际字符串[]中而不是每行中搜索是否更明智


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

如果正确理解任务,我将执行以下操作:

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;
}
public int find(字符串行,int起始位置){
如果(单据[startPosition]”包含(行){
返回起始位置;
}
对于(int i=0;i0&&doc[startPosition-i].contains(行)){
返回起始位置-i;
}
if(startPosition+i

这将返回数组中第一个元素的索引,其中包含作为行参数传递的子字符串。

您应该注意这是否正确

一种方法是:

    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.matches(searchTerm)
更改
s.contains(searchTerm)

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

示例:

  • (维基)
  • ()
  • ()
  • (维基)
  • (维基)
  • Rabin-Karp字符串匹配算法()
  • Aho–字符串匹配算法()

    • 他说这不是家庭作业,所以这里是:

      (这实际上是编译和工作)

      import java.io.*;
      公共A类{
      公共静态void main(字符串[]args){
      字符串[]arr={“嗨,伙计们”,“这”,“是”,“斯巴达”};
      System.out.println(“输入子字符串:”);
      字符串substr=“”;
      试一试{
      substr=新的BufferedReader(新的InputStreamReader(System.in)).readLine();
      }catch(ioe){System.exit(0);}
      
      对于(int i=0;这是作业吗?如果是的话,你应该给它贴上这样的标签。@steveom:你肯定在这里,但为了帮助你,我们需要一些信息:你想放在数组中并搜索的文本数据来自哪里?doc现在是什么类型的对象?你试图读取文件吗?@steveom:还有一些明显的错误和省略:
      found=false
      应该是
      found==false
      您现在正在分配它,而不是比较。我也没有看到任何地方您实际上正在搜索一行中的子字符串……从您的示例中:`查找“ta”的第一个匹配项'`@Paul Sasik,修复了equals问题。doc是我定义的类的一个瞬间,具有数组的所有基本功能。这可能非常接近,但我认为OP需要在每行上执行子字符串搜索:从问题
      中查找“ta”的第一个匹配项< /代码>这是第三个示例条目的子串。是的,保罗。我需要搜索子串的每一行。我遇到的主要问题是,我有一个值,我们称之为I,指向数组,并指向数组中间的一个位置,我想遍历数组并找到最接近的数组。dex to i,进入存在子字符串的数组中。抱歉,我之前没说清楚!好的,我上面实现的是搜索子字符串,所以我不确定Paul在说什么。现在它确实返回数组中的第一个索引,该索引对应于包含作为参数传递的子字符串的字符串,但似乎应该有一个另一个参数和索引应该是最接近该参数值的参数。在这种情况下,需要调整算法,我将适当地编辑我的原始代码。非常感谢Alexander,我已经用我的类运行了这段代码,它比我以前做的要干净得多,它只需要一点adap(掌声:)谢谢:)
      
          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++;
          }
      
          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;
                                  }
                          }
                  }
          }