假设你有类似的字符串:
String longStr="someText1@someText2@someText3@someText@someText4@someText5@someText6@someText7@someText8@someText9@someText10@someText11@someText12@someText13@someText14";
如何获取上述字符串中 @ 字符第10次出现的索引?
我需要索引从该索引分割到结束。
答案 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));
}