一、indexOf的两种用法:
1. indexOf(String str):返回指定字符str在字符串中第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回-1。
2. indexOf(String str,int index):返回从index位置开始查找指定字符str在字符串中第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回-1。
如:
str = "147258369147258";
System.out.println(str.indexOf("258"));
System.out.println(str.indexOf("258",6));
两个结果分别为3和12。
第一个输出函数只有一个参数,因此相当于从0的索引开始查找,直到找到字符串“258”的“2”所在的索引4。
第二个输出函数有两个参数,从索引为6的字符开始查找,直到找到字符串“258”的“2”所在的索引12。
这就是indexOf的用法。
二、charAt的用法:
charAt()方法用于返回指定索引处的字符。索引范围从0到length()-1。
如:
public class Test{
public static void main(String args[]){
String s = "aaafawfew";
char a = s.charAt(6);
System.out.println(a);
}
}
以上程序所得结果为 f 。
三、结合 indexOf 和 charAt 方法求无重复字符的最长字串。
class Test {
public int Test1(String s) {
int i = 0; //索引所在位置
int flag = 0; //从此索引开始查找
int length = 0; //无重复字符的最长长度
int result = 0; //最大长度
while (i < s.length()) {
int pos = s.indexOf(s.charAt(i),flag); //pos是从flag开始查找的最近的s.charAt(i)
if (pos < i) { //发现了重复字符
flag = pos + 1; //当找到重复字符时,让flag等于第一个重复字符的索引+1
if (length > result) {
result = length;
}
if (result >= s.length() - pos - 1) { //如果最大长度大于剩余长度,返回result
return result;
}
length = i - pos - 1; //i-pos就是长度,而下面有length++,因此要-1
}
length++;
i++;
}
return length;
}
}
indexOf 和 charAt()方法能够大大减少代码的运算量,也能快捷地查找各个重复字符的索引,这样就能返回length的值。