题目一
将一个字符串进行反转,将字符串中指定部分进行反转
方式一
转换为char[]
public class HelloWorld {
/*
讲一个字符串进行反转,将字符串中指定部分进行反转
方式一:转换为char[]
*/
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String str = "hello world!";
String out = temp.reverse(str,2, 6);
System.out.println(out);
String s = temp.reverse(str);
System.out.println(s);
}
public String reverse(String str, int startIndex,int endIndex){
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);
}
public String reverse(String str){
char[] arr = str.toCharArray();
for(int x = 0,y = str.length()-1;x<y;x++,y--){
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
return new String(arr);
}
}
这里提供两个reverse()方法,两个方法参数不同,属于一个方法的重载。如果没有指定startIndex和endIndex,那么就把整体进行反转;如果指定的话,就对指定的标号进行反转。
当然也可以构造一个反转的类,通过构造方法来进行不同参数的运行。
方式二
//方式二,使用string的拼接
public String reverse(String str, int startIndex,int endIndex){
String reverseStr = str.substring(0,startIndex);
for(int i = endIndex;i>= startIndex;i-- ){
reverseStr +=str.charAt(i);
}
reverseStr += str.substring(endIndex + 1);
return reverseStr;
}
//这里仅列出第二个方法部分的代码,如果需要使用参照方式一
//中的完整代码进行替换即可
方式三
//方式三,使用StringBuffer/StringBuilder替换String
public String reverse(String str, int startIndex,int endIndex){
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();
}
题目二
获取一个字符串在另一个字符串中出现的次数。
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String mainStr = "abdjkfabdfabdjkfba";
String subStr = "ab";
int count = temp.getCount(mainStr, subStr);
System.out.println(count);
}
/**
* 获取subStr在mainStr中出现的次数
* @param mainStr---目标字符串
* @param subStr---子字符串
* @return 次数
*/
public int getCount(String mainStr,String subStr){
int mainLength = mainStr.length();
int subLength = subStr.length();
int index;
int count = 0;
if(mainLength >= subLength){
while((index = mainStr.indexOf(subStr))!= -1){
count++;
mainStr = mainStr.substring(index + subStr.length());
}
return count;
}
return 0;
}
}
由于 mainStr= mainStr.substring(index + subStr.length());每次都要重新造一个,因此效率会降低。
因此提出一种改进的方法。
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String mainStr = "abdjkfabdfabdjkfba";
String subStr = "ab";
int count = temp.getCount(mainStr, subStr);
System.out.println(count);
}
/**
* 获取subStr在mainStr中出现的次数
* @param mainStr---目标字符串
* @param subStr---子字符串
* @return 次数
*/
public int getCount(String mainStr,String subStr){
int mainLength = mainStr.length();
int subLength = subStr.length();
int index = 0;
int count = 0;
if(mainLength >= subLength){
while((index = mainStr.indexOf(subStr,index))!= -1){
count++;
index += subLength;
}
return count;
}
return 0;
}
}
题目三
获取个字符串中最大相同子串
//这里假设只有一个最大相同字串(即str1中的子串在str2中仅有一种情况)
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String str1 = "fjdkhellofjkd";
String str2 = "hello";
String str = temp.getMaxSameString(str1,str2);
System.out.println(str);
}
public String getMaxSameString(String str1, String str2){
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;
}
}
那么如果是不止一个最大子串呢?在没有学习集合之前,可以这样处理。
import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String str1 = "fjdkhellofjkdworld";
String str2 = "helloworld";
String[] out = temp.getMaxSameString(str1,str2);
System.out.println(Arrays.toString(out));
}
public String[] getMaxSameString(String str1, String str2) {
StringBuffer sBuffer = new StringBuffer();
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)) {
sBuffer.append(subStr + ",");
}
}
if (sBuffer.length() != 0) {
break;
}
}
String[] out = sBuffer.toString().replaceAll(",$", " ").split("\\,");
return out;
}
}
// 返回结果为:
// [hello, world ]