在不使用indexOf方法的情况下查找indexOf字符串

时间:2018-02-12 08:48:32

标签: java string

目前正在处理一个小程序,我的任务是更多地了解indexOf方法如何工作而不实际使用indexOf方法。我觉得我很接近代码是正确的。我将提供我的代码和我的测试文件。我想只为我的程序使用charAt(),length()和equals()方法。

public class MiniString
{
   private String str;


   public MiniString(String x)
   {
      this.str = x;
   }


   public int findIndexOf(int a)
   {
      int counter = 0;
      for(int i = 0; i < this.str.length(); i++)
      {
         counter++;
      } 

      char[] arr = new char[counter];

      for(int i = 0; i < arr.length; i++)
      {
         arr[i] = this.str.charAt(i);
      }
   }
}

以下是我传递给我的方法的内容

public class TestMiniString
{
   public static void main(String[] args)
   {

      MiniString s1 = new MiniString("Hello world, welcome to the Java world.");



      System.out.println(s1.findIndexOf('w'));
      System.out.println(s1.findIndexOf('m'));
      System.out.println(s1.findIndexOf('x'));
      System.out.println(s1.findIndexOf('J'));
      System.out.println(s1.findIndexOf('a'));
      System.out.println();

}

3 个答案:

答案 0 :(得分:1)

这很简单。 String中的Java是内部字符数组。使用charAt(int index)您可以直接访问此内容。所有你需要的只是循环这个数组并找到所需字符的第一次出现:

public final class MiniString {
    private final String str;

    public MiniString(String str) {
        this.str = str;
    }

    public int indexOf(int ch) {
        for (int pos = 0; pos < str.length(); pos++)
            if (str.charAt(pos) == ch)
                return pos;

        return -1;
    }

    public int indexOf(String str) {
        if (str == null || str.trim().isEmpty())
            return -1;

        for (int pos = 0; pos < this.str.length() - str.length(); pos++) {
            for (int i = 0; i <= str.length(); i++) {
                if (i == str.length())
                    return pos;
                if (this.str.charAt(pos + i) != str.charAt(i))
                    break;
            }
        }

        return -1;
    }
}

但要使用外来符号,这些符号用多个字符编写(例如 中国文字)。所以这不适用于所有情况。

请查看Java charAt used with characters that have two code units 了解更多详情。

indexOf(String str)实施是严格的。 Thare是String searching algorithm的许多特殊算法。

答案 1 :(得分:0)

请尝试这个。希望你喜欢。

library(data.table)
target <- "ENSG00000272602.4"

setDT(df)
df[,lapply(.SD, function(x) unlist(tstrsplit(x, ";", fixed=TRUE)))][ref == target]

#                 ref b c d   e
#1: ENSG00000272602.4 1 3 1 3.2

答案 2 :(得分:0)

public static int subStringIndex(String str, String substr) {
        int strlen = str.length();
        int substrlen = substr.length();
       int count=0;
       int substrlen2=substr.length();
        if (substrlen >= 1) {
            for(int i=0;i<strlen-substrlen+1;i++){
                String A=str.substring(i,substrlen2);
                if(A.equalsIgnoreCase(substr)){
                return count+1;
                }else{
                    count++;
                    substrlen2++;
                }
            }
            return -1;              
        }
        return -1;
    }