练习一:
package string.test;
/*
目的:写个程序,去除字符串两端的空格
思路:1、判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。
结束处判断空格也是如此。
2、当开始和结尾都判断到不是空格时,就是要获取的字符串。
步骤:1、创建一个类
2、创建一个方法,判断首位非空格处。
3、创建一个输出打印方法。
4、创建一个主函数,输入任意一个字符串,验证结果。
*/
class StringTest{
public static void sop(String str){
System.out.println(str);
}
public static String myTrim(String str){
int start = 0;
int end = str.length()-1;
while(start <= end && str.charAt(start) == ' ')
start++;
while(end >= start && str.charAt(end) == ' ' )
end--;
return str.substring(start,end +1);
}
public static void main(String [] args){
String s = " dlsj diid kds ";
sop("(" + s + ")");
s = myTrim(s);
sop("(" + s + ")");
}
}
练习二:
package string.test;
/*
目的:将一个字符串进行反转,将字符串中指定部分进行反转。
思路:1、曾经学习过对数组的元素进行反转。
2、将字符串变成数组,对数组反转。
3、将反转后的数组变成字符串。
4、只要将反转的部分的开始和结束位置作为参数传递即可。
*/
class StringTest2{
public static String turnString(String str,int start,int end){
char ch;
String beginString;
String tranform;
String endString;
if(start != 0)
beginString = str.substring(0,start);
else beginString ="";
tranform = str.substring(start,end);
if(end != str.length())
endString = str.substring(end,str.length());
else endString = "";
char[] cha = tranform.toCharArray();
for(int i = 0; i<=cha.length/2; i++){
ch = cha[i];
cha[i] = cha[cha.length-1-i];
cha[cha.length-1-i] = ch;
}
tranform = new String(cha);
return beginString + tranform + endString;
}
public static void main(String args []){
String s = "abcdefg";
System.out.println(s);
s = turnString(s,2,5);
System.out.println(s);
}
}
练习三:
package string.test;
/*
目的:获取一个字符串在另一个字符串中出现的次数.
"abkkcdkkefkkskk"
思路:
1、定义个计数器。
2、获取kk第一次出现的位置。
3、从第一个出现位置后剩余的字符串中继续获取kk出现的位置。
4、当获取不到时,计数完成。
*/
class StringTest3{
public static void main(String[] args){
String s = "abkkcdkkefkkskk";
int count = getSubCount(s,"kk");
System.out.println("kk出现的次数为:" + count);
}
public static int getSubCount(String s, String key){
int count = 0;
int index = s.indexOf("kk");
while(index != -1){
count++;
index = s.indexOf("kk",index + key.length());
}
return count;
}
}
练习四:
package string.test;
/*
目的:获取两个字符串中最大相同子串,第一个动作:将短的那个串进行长度依次递减的子串打印。
"abcwerthelloyuiodef" "cvhellobnm"
思路:
1、将短的那个子串按照长度递减的方式获取。
2、将每获取到的子串去长串中判断是否包含,如果包含,已经找到。
*/
class StringTest4{
public static void main(String[] args){
String s1 = "abcwerthelloyuiodef";
String s2 = "cvhellobnm";
String s = getLongSubstring(s1, s2);
if(s == "")
System.out.println("没有共同子串");
else
System.out.println("两字符串的最大共同子串是:" + s);
}
//获取两字符串中最大共同子串
private static String getLongSubstring(String s1, String s2){
//判断两字符串的长串和短串
String sMax, sMin;
if(s1.length() <= s2.length()){
sMin = s1;
sMax = s2;
}
else{
sMin = s2;
sMax = s1;
}
//定义循环,对字符串进行判断(用短字符串比较长字符串)
int end = sMin.length()-1;
int start = 0;
for(String sub ; end >= start ; end-- ){//每循环完一次,字符串长度减一
//用固定长度的子串,从0位开始与长串字符进行比较,每次循环向前增加一位
for(int i = start,e = end; e <= sMin.length()-1; i++,e++){
sub = sMin.substring(i,e+1);
if(sMax.contains(sub)) return sub;
}
}
return "";
}
}
练习五:
package sonyi.exercise;
/*
练习:定义一个字符串 str = "a,b,c;d,e,f,g;h,i,j,k,l"; 把此字符串拆分成一个二维数组的字符串,并打印出来格式如下(3行): 用方法split()
a b c
d e f g
h i j k l
*/
public class Exercise3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "a,b,c;d,e,f,g;h,i,j,k,l";
String[] row = s.split(";");//对字符串进行第一次切割
String[][] array = new String[row.length][];//开辟二维字符串数组行空间
for(int i = 0; i < row.length; i++){
array[i] = row[i].split(",");
}
/*
for(int i = 0; i < row.length; i++){//遍历第一次切割后的字符串数组
String[] col = row[i].split(",");//对字符串进行第二次切割
array[i] = new String[col.length];//开辟二维字符串数组列空间
for(int j = 0; j < col.length; j++){//遍历第二次切割后的字符串数组
//System.out.print(col[j] + " ");//打印数组元素
array[i][j] = col[j];//将数组元素赋值给二维字符串数组
}
}
*/
//打印二维字符串数组
for(int i = 0; i < array.length; i++){
for(int j = 0; j < array[i].length; j++){
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}