1.字符串统计(查找)
- hash(利用ascall码生成hash)
- 匹配(KMP算法)
习题1:
统计字符串中每个字符出现的次数。
package com.test;
/**
* 统计字符串中每个字符出现的次数
*/
public class CountTheNum {
public static int [] count(String s){
char [] ss=s.toCharArray();//将字符串转为字符数组
int [] aa=new int[256];
for (char c:ss) {
aa[c]++;//字符所在的数组元素个数加一
}
return aa;
}
public static void main(String[] args) {
String s="nsjsiiaaa";
int [] aa=count(s);
for (int i=0;i<aa.length;i++){
if(aa[i]>0){
System.out.println((char)i+":"+aa[i]);
}
}
}
}
习题2:
一个元素的移动:将字符串中指定元素移至指定位置
package com.test;
/**
* 字符串移动
* 一个元素的移动:将字符串中指定元素移至指定位置
* 如 a b c d e o--->a c d e b o
*/
public class MoveOneWord {
public static char [] afterMove(String s,int start,int end){
char [] ss=s.toCharArray();
char a=ss[start];//将要移动的元素先备份
for (int i=start;i<end;i++){
ss[i]=ss[i+1];
}
ss[end]=a;
return ss;
}
public static void main(String[] args) {
String s="abcde";
String s2=new String(afterMove(s,1,3));
System.out.println(s2);
}
}
习题3:
将指定字符串移至最后:交换+反转
package com.test;
/**
* 将指定字符串移至最后:交换+反转
* a bcd ef ---> a ef bcd
*/
public class MoveMoreWords {
public static String moveString(String s,int start,int end){
char[] aa=s.toCharArray();
int i,j;
char a;
for (i=start,j=end;i<j;i++,j--){
a=aa[i];
aa[i]=aa[j];
aa[j]=a;
}
return new String(aa);
}
public static String getString(String s,int start,int end){
String ss;
ss=moveString(s,start,s.length()-1);
ss=moveString(ss,start,s.length()+start-end-2);
ss=moveString(ss,s.length()+start-end-1,s.length()-1);
return ss;
}
public static void main(String[] args) {
String ss="abdefgh";
ss=getString(ss,6,6);
System.out.println(ss);
}
}
习题4:
将字符串以空格(32)区分的每个单词,分别进行反转 * you are a good student--->student good a are you
package com.test;
/**
* 将字符串以空格(32)区分的每个单词,分别进行反转
* you are a good student--->student good a are you
*/
public class WordsConvert {
public static String MoveWords(String s,int start,int end){
char [] aa=s.toCharArray();
int i,j;
char c;
for (i=start,j=end;i<j;i++,j--){
c=aa[i];
aa[i]=aa[j];
aa[j]=c;
}
return new String(aa);
}
public static String convertWords(String s){
int start=0;
//先将字符串整体进行反转
s=MoveWords(s,0,s.length()-1);
char [] aa=s.toCharArray();
for(int j=0;j<s.length();j++){
//出现空格时,对单个单词进行反转
if (aa[j]==32){
s=MoveWords(s,start,j-1);
start=j+1;
}
//对最后一个单词进行反转
if(j==s.length()-1){
s=MoveWords(s,start,s.length()-1);
}
}
return s;
}
public static void main(String[] args) {
String ss="you are a good student";
ss=convertWords(ss);
System.out.println(ss);
}
}
习题5:
将语句中的空格用20%替换 * you are a good student--->you 20%are20%a20%student
package com.test;
/**
* 将语句中的空格用20%替换
* you are a good student---》》you 20%are20%a20%student
*/
public class ReplaceBlank {
public static String replace(String s){
char[] c1=s.toCharArray();
int cnt=0;
for(int i=0;i<s.length();i++){
if(c1[i]==32){
cnt++;
}
}
char[] c2=new char[s.length()+cnt*2];
int index=0;
for(int i=0;i<s.length();i++){
//空格替换成20%
if(c1[i]==32){
c2[index]='2';
index++;
c2[index]='0';
index++;
c2[index]='%';
index++;
}else{
c2[index]=c1[i];
index++;
}
}
return new String(c2);
}
public static void main(String[] args) {
String s="you are a good student";
s=replace(s);
System.out.println(s);
}
}