标题
Java学习之有关String类的一些算法题一(题目来源------尚硅谷)
1. 模拟一个trim方法,去除字符串两端的空格
public class TrimTest {
public static void main(String[] args) {
TrimTest t=new TrimTest();
t.test();
}
public void test() {
int num1=0;//用于记录前端空格中最后一个的下标
int num2=0;//用于记录后端空格中最后一个的下标
int number=0;
String str=" He llo ";
char []Array=str.toCharArray();
/*
* 寻找前端空格中最后一个空格的下标,找完之后使用break退出
*/
for(int i=0;i<Array.length;i++) {
if(Array[i]==' ') {
num1=i;
number++;
}else {
break;
}
}
/*
* 同理,寻找后端空格中往前最后一个空格的下标,找完之后使用break退出
*/
for(int j=Array.length-1;j>=0;j--) {
if(Array[j]==' ') {
num2=j;
number++;
}else {
break;
}
}
char Arr[]=new char[Array.length-number];//重新创建一个数组用来存放去掉前端和后端空格后的字符数组
int i=0;
for(int k=num1+1;k<num2;k++) {
Arr[i++]=Array[k];
}
String str1=new String(Arr);
System.out.println(str1);
}
}
2.将一个字符串进行反转,将字符串中指定部分进行反转,比如"abcdefg"转为"abfedcg"
public class FlipTest {
public static void main(String[] args) {
FlipTest f=new FlipTest();
f.test();
}
public void test() {
int firstlocation=0;
int lastlocation=0;
String str="abcdefg";
char[] Array=str.toCharArray();
char []Arr=new char[Array.length];//用于存放改变后的字符数组
/*
* 找出子字符串中的起始字符串的位置和最后一个字符串的位置
*/
for(int i=0;i<Array.length;i++) {
if(Array[i]=='c'&&Array[i+1]=='d'&&Array[i+2]=='e'&&Array[i+3]=='f') {
firstlocation=i;
lastlocation=i+3;
}
}
int num=0;
for(int i=0;i<firstlocation;i++) { //存放被要求反转的子字符串前的字符
Arr[num++]=Array[i];
}
for(int j=lastlocation;j>=firstlocation;j--) { //存放反转后的子字符串
Arr[num++]=Array[j];
}
for(int k=lastlocation+1;k<Array.length;k++) { //存放被要求反转的字符串后面的字符
Arr[num++]=Array[k];
}
String str1=new String(Arr);
System.out.println(str1);
}
}
3.获取一个字符串在另一个字符串中出现的次数
public class SearchTest {
public static void main(String[] args) {
SearchTest s=new SearchTest();
s.test1();
s.test2();
}
public void test1() {
/*
* 下面这种做法可以解决已知的将要查找的较短的子字符串,但是如果将要查找的字符串是未知的或者要查找的字符串很长的话,这种方法将不适用
*/
int ans=0;
String str="abkkcadkabkebfkabkskab";
char []Array=str.toCharArray();
for(int i=0;i<Array.length-1;i++) {
if(Array[i]=='a'&&Array[i+1]=='b') {
ans++;
}
}
System.out.println(ans);
}
/*
* 利用String类的方法indexOf()
* int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
* int indexOf(String str,int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
* 注:如果未找到返回-1
*/
public void test2() {
String str="abkkcabkadkebfkabkskab";
String str1="ab"; //要求寻找的子字符串
int end=0; //用来记录已查询的字符串中的最后一个字符的位置
int ans=1; //因为要先查询第一个字符串的位置,所以ans的初始值为1
int index=str.indexOf(str1); //用于记录字符串第一次出现处的索引
if(index==-1) { //如果第一次查询就返回-1,说明长字符串中根本就没有要查找的字符串
ans=0;
}
else {
while(end<str.length()) { //循环结束的条件为end<str.length()
index=str.indexOf(str1,index+str1.length()-1); //第二个参数表示再次查找的起始位置
if(index!=-1) {
ans++;
}
end=index+str1.length();
}
}
System.out.println(ans);
}
}