在字符串中查找子字符串的位置(而不是indexOf)

时间:2013-09-17 08:26:23

标签: java string position substring

String str = "abc def ghi";

是否有像str.find("abc")这样的方法会让我1 而str.find("def")会让我回复2?

java语言..

4 个答案:

答案 0 :(得分:7)

这样的事情怎么样?

int getIndex(String str, String substring)
{
  return Arrays.asList(str.split("\\s+")).indexOf(substring)+1;
}

免责声明:这根本不高效。每次调用函数时,它都会从头开始分割整个字符串。

测试代码:

String str = "abc def ghi";
System.out.println(getIndex(str, "abc"));
System.out.println(getIndex(str, "def"));

<强>打印

1
2

<强>解释

str.split("\\s+")将字符串拆分为空格,并将每个部分放入数组中的位置。

Arrays.asList为数组返回ArrayList

indexOf(substring)ArrayList

中找到字符串的位置

+1因为Java使用0索引而你想要1索引。

答案 1 :(得分:1)

由于您没有请求子字符串的索引,而是请求子字符串属于哪个字位置,因此没有可用的内置方法。但是您可以按空格字符拆分输入字符串并读取split方法返回的列表中的每个项目,并检查子字符串所属的列表项位置。

如果您需要此代码,请告诉我。

答案 2 :(得分:1)

我不认为这有本机功能。但你可以写自己的。

好像你想根据空格字符拆分字符串。

String[] parts = string.split(" ");

循环创建的数组。并返回索引+ 1(因为java有零基索引)

for(int i = 0; i < parts.length; i++)
{
  if(parts[i].equals(parameter))
  {
     return i + 1;
  }
}

答案 3 :(得分:1)

如果您希望找到相同字符串的多个位置,请尝试使用此代码。

//Returns an array of integers with each string position
private int[] getStringPositions(String string, String subString){
        String[] splitString = string.split(subString); //Split the string

        int totalLen = 0; //Total length of the string, added in the loop

        int[] indexValues = new int[splitString.length - 1]; //Instances of subString in string

        //Loop through the splitString array to get each position
        for (int i = 0; i < splitString.length - 1; i++){

            if (i == 0) {
                //Only add the first splitString length because subString is cut here.
                totalLen = totalLen + splitString[i].length();
            }
            else{
                //Add totalLen & splitString len and subStringLen
                totalLen = totalLen + splitString[i].length() + subString.length();
            }

            indexValues[i] = totalLen; //Set indexValue at current i
        }

        return indexValues;
    }

例如:

String string = "s an s an s an s"; //Length = 15
String subString = "an";

答案会返回indexValues =(2,7,12)。