面试题
public class StringTest {
String str = new String("good");
char[] ch = { 't', 'e', 's', 't' };
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'b';
}
public static void main(String[] args) {
StringTest ex = new StringTest();
ex.change(ex.str, ex.ch);
System.out.println(ex.str);//good
System.out.println(ex.ch);//best
}
}
练习题1
将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”。
方式一:转换为char[]
public String reverse(String str, int startIndex, int endIndex) {
if (str != null) {
char[] arr = str.toCharArray();
for (int x = startIndex, y = endIndex; x < y; x++, y--) {
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
return new String(arr);
}
return null;
}
方式二:使用String的拼接
public String reverse1(String str, int startIndex, int endIndex) {
if (str != null) {
//第一部分
String reverseStr = str.substring(0, startIndex);
//第二部分
for (int i = endIndex; i >= startIndex; i--) {
reverseStr += str.charAt(i);
}
//第三部分
reverseStr += str.substring(endIndex + 1);
return reverseStr;
}
return null;
}
方式三:使用StringBuffer/StringBuilder替换String
public String reverse2(String str, int startIndex, int endIndex) {
if (str != null) {
StringBuilder builder = new StringBuilder(str.length());
//第一部分
builder.append(str.substring(0, startIndex));
//第二部分
for (int i = endIndex; i >= startIndex; i--) {
builder.append(str.charAt(i));
}
//第三部分
builder.append(str.substring(endIndex + 1));
return builder.toString();
}
练习题2
获取一个字符串在另一个字符串中出现的次数。比如:获取“ ab”在 “abkkcadkabkebfkabkskab” 中出现的次数。
public int getCount(String mainStr, String subStr) {
int mainLength = mainStr.length();
int subLength = subStr.length();
int count = 0;
int index = 0;
if (mainLength >= subLength) {
//方式一:
// while((index = mainStr.indexOf(subStr)) != -1) {
// count++;
// mainStr = mainStr.substring(index + subLength);
// }
//方式二:对方式一的改进
while ((index = mainStr.indexOf(subStr, index)) != -1) {
count++;
index += subLength;
}
}
return count;
}
练习题3
获取两个字符串中最大相同子串。(两个字符串中只有一个最大相同子串)比如:str1 = “abcwerthelloyuiodef“;str2 = “cvhellobnm”。
//将短的那个串进行长度依次递减的子串与较长的串比较。
public String getMaxSameString(String str1, String str2) {
if(str1 != null && str2 != null) {
String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
String minStr = (str1.length() < str2.length()) ? str1 : str2;
int length = minStr.length();
for (int i = 0; i < length; i++) {
for (int x = 0, y = length - i; y <= length; x++, y++) {
String subStr = minStr.substring(x, y);
if (maxStr.contains(subStr)) {
return subStr;
}
}
}
}
return null;
}
版权声明:本文为qq_43479665原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。