如何在String中获取(n)字符索引?

时间:2014-02-04 08:02:25

标签: java

假设你有类似的字符串:

String longStr="someText1@someText2@someText3@someText@someText4@someText5@someText6@someText7@someText8@someText9@someText10@someText11@someText12@someText13@someText14";

如何获取上述字符串中 @ 字符第10次出现的索引?

我需要索引从该索引分割到结束。

7 个答案:

答案 0 :(得分:7)

您可以使用StringUtils.ordinalIndexOf()查找字符串

中的第n个索引

答案 1 :(得分:5)

String s=longStr.split("@")[9];

会给someText10

如果你想要子串直到结束

String sub=longStr.substring(indexOf(s));

或一体化:

String sub=longStr.substring(indexOf(longStr.split("@")[9]));

答案 2 :(得分:5)

以“手动”方式获取索引(不含StringUtils):

pos = -1;
for (int i = 0; i < 10; i++) {
    pos = longStr.indexOf('@', pos + 1);
}

要获取没有索引的其余字符串:使用正则表达式。 "(?:[^@]*@){10}(.*)"应该这样做。

答案 3 :(得分:1)

试试这个:

String longStr="someText1@someText2@someText3@someText@someText4@someText5@someText6@someText7@someText8@someText9@someText10@someText11@someText12@someText13@someText14";
System.out.println(longStr.substring(longStr.indexOf(longStr.split("@")[10])));

输出:

someText10@someText11@someText12@someText13@someText14

如果您想避免ArrayIndexOutOfBoundsException,请使用以下代码,并且您不确定字符串中是否包含10个@

longStr.substring(longStr.indexOf(longStr.split("@")[Math.min(10,Math.max(longStr.lastIndexOf("@"),0))]))

答案 4 :(得分:1)

这种方法怎么样:

public static int indexOf(String haystack, String needle, int ordinal) {
    try {
        return haystack.length() - haystack.split(needle, ordinal + 1)[ordinal].length() - 1;
    } catch (ArrayIndexOutOfBoundsException e) {
        return -1;
    }
}

并且呼叫:

String longStr="someText1@someText2@someText3@someText@someText4@someText5@someText6@someText7@someText8@someText9@someText10@someText11@someText12@someText13@someText14";
int idx = indexOf(longStr, "@", 10);
System.out.println("Index of 10th occurrence: " + idx);

将输出98

答案 5 :(得分:0)

testString.split(“@”,11)[10]

这将返回您所需的结果。 方法split(String regex,int limit) - 此方法使用regex将字符串拆分为限制次数并返回数组。

希望,这将解决您的问题。

答案 6 :(得分:0)

请试试这个:

public class StringUtils {

public static int findIndexOfCharacter(String str, char ch, int num){
    if(str == null || str.equals("")){
        return -1;
    }

    if(num <= 0 || num >= str.length() ){
        return -1;
    }

    if(!str.contains(String.valueOf(ch))){
        return -1;
    }else{
        int[] indexOfCh = new int[str.length()];
        int index = 0;
        String[] strArray = str.split("");
        for(int i = 1; i < str.length(); i++){
            if(strArray[i].charAt(0) == ch){
                indexOfCh[index] = i;
                index++;
            }
        }

        if(num > index){
            return -1;
        }
        return indexOfCh[num-1];
    }


}

}

JUnit测试:

@Test
public void testFindIndexOfCharacter(){
    longStr = "someText1@someText2@someText3@someText4@someText5@someText6@someText7@someText8@someText9@someText10@someText11@someText12@someText13@someText14@someText15";
    searchCh = '@';
    positionNum = 10;
    assertEquals(101, StringUtils.findIndexOfCharacter(longStr, searchCh, positionNum));
}