黑马程序员---String练习中体现的思想
2014-01-14 10:34
246 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
/*
1,模拟一个trim方法,去除字符串两端的空格。
思路:
1,判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。
结尾处判断空格也是如此。
2,当开始和结尾都判断到不是空格时,就是要获取的字符串。
*/
public static void sop(Object obj) //打印
{
System.out.println(obj);
}
{
int beginIndex = 0;
int endIndex = str.length()-1;
while( beginIndex<=endIndex && str.charAt(beginIndex)==' ' )
{
beginIndex++;
}
while( beginIndex<=endIndex && str.charAt(endIndex)==' ' )
{
endIndex--;
}
return str.substring(beginIndex,endIndex+1);
}
/*
2,将一个字符串进行反转。将字符串中指定部分进行反转,"abcdefg";abfedcg
思路:
1,曾经学习过对数组的元素进行反转。
2,将字符串变成数组,对数组反转。
3,将反转后的数组变成字符串。
4,只要将或反转的部分的开始和结束位置作为参数传递即可。
*/
private static void reverse(char[] ch, int x, int y)//将字符数组中指定的一部分反转
{
for(int start=x,end=y-1;start<end;start++,end--)
{
swap(ch,start,end);
}
}
private static void reverse(char[] ch)//反转字符数组
{
for(int start=0,end=ch.length-1;start<end;start++,end--)
{
swap(ch,start,end);
}
}
private static void swap(char[] ch, int x, int y)//交换字符
{
char temp = ch[x];
ch[x] = ch[y];
ch[y] = temp;
}
public static String reverseString(String str, int x, int y) //将字符串中指定部分反转
{
char[] ch = str.toCharArray();
reverse(ch,x,y);
return new String(ch);
}
public static String reverseString(String str)//将字符串反转
{
char[] ch = str.toCharArray();
reverse(ch);
return new String(ch);
}
/*
3,获取一个字符串在另一个字符串中出现的次数。
"abkkcdkkefkkskk"
思路:
1,定义个计数器。
2,获取kk第一次出现的位置。
3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置。
每获取一次就计数一次。
4,当获取不到时,计数完成。
*/
初期想法:
public static int stringCount(String str1, String str2)//获取str2在str1中出现的次数
{
int count = 0;
for(int x=0; x<str1.length(); x++)
{
if( ( ( x+str2.length() ) <= str1.length() ) && str1.substring( x,x+str2.length() ).equals(str2) )
{
count++;
x = ( x + ( str2.length()-1 ) );
}
}
return count;
}
public static int containCount(String s1, String s2)//获取s2在s1中出现的次数
{
int count = 0;
while( s1.contains(s2) )
{
count++;
s1 = s1.substring( s1.indexOf(s2) + s2.length() );
}
return count;
}再演变:(为了不在内存中产生那么多字符串) public static int getSubCount(String str, String key)//获取key在str中出现的次数
{
int count = 0;
int index = 0;
while( ( index=str.indexOf(key,index) ) != -1 )
{
count++;
index = index+key.length();
}
return count;
}
/*
4,获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。
"abcwerthelloyuiodef"
"cvhellobnm"
思路:
1,将短的那个子串按照长度递减的方式获取到。
2,将每获取到的子串去长串中判断是否包含,
如果包含,已经找到!。
*/
思想:( 短串尾减一,整串向后移,每次移动一位,直到end等于短串的length() )
public static String maxSameString(String s1, String s2)//求两个字符串中最大相同子串
{
String max = ( s1.length() > s2.length() ) ? s1 : s2 ;
String min = (max==s1) ? s2 : s1 ;
sop("max = "+max+"........min = "+min);
for(int x=0; x<min.length(); x++)//短的的长度————短字符串能减短的次数。
{
for(int y=0,z=min.length()-x; z<=min.length(); y++,z++)//y是头,z是尾。
{
String temp = min.substring(y,z);
//sop(temp);
if(max.contains(temp))
{
return temp;
}
}
}
return "";
}
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
/*
1,模拟一个trim方法,去除字符串两端的空格。
思路:
1,判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。
结尾处判断空格也是如此。
2,当开始和结尾都判断到不是空格时,就是要获取的字符串。
*/
public static void sop(Object obj) //打印
{
System.out.println(obj);
}
public static String trimTest(String str) //实现trim的功能
{
int beginIndex = 0;
int endIndex = str.length()-1;
while( beginIndex<=endIndex && str.charAt(beginIndex)==' ' )
{
beginIndex++;
}
while( beginIndex<=endIndex && str.charAt(endIndex)==' ' )
{
endIndex--;
}
return str.substring(beginIndex,endIndex+1);
}
/*
2,将一个字符串进行反转。将字符串中指定部分进行反转,"abcdefg";abfedcg
思路:
1,曾经学习过对数组的元素进行反转。
2,将字符串变成数组,对数组反转。
3,将反转后的数组变成字符串。
4,只要将或反转的部分的开始和结束位置作为参数传递即可。
*/
private static void reverse(char[] ch, int x, int y)//将字符数组中指定的一部分反转
{
for(int start=x,end=y-1;start<end;start++,end--)
{
swap(ch,start,end);
}
}
private static void reverse(char[] ch)//反转字符数组
{
for(int start=0,end=ch.length-1;start<end;start++,end--)
{
swap(ch,start,end);
}
}
private static void swap(char[] ch, int x, int y)//交换字符
{
char temp = ch[x];
ch[x] = ch[y];
ch[y] = temp;
}
public static String reverseString(String str, int x, int y) //将字符串中指定部分反转
{
char[] ch = str.toCharArray();
reverse(ch,x,y);
return new String(ch);
}
public static String reverseString(String str)//将字符串反转
{
char[] ch = str.toCharArray();
reverse(ch);
return new String(ch);
}
/*
3,获取一个字符串在另一个字符串中出现的次数。
"abkkcdkkefkkskk"
思路:
1,定义个计数器。
2,获取kk第一次出现的位置。
3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置。
每获取一次就计数一次。
4,当获取不到时,计数完成。
*/
初期想法:
public static int stringCount(String str1, String str2)//获取str2在str1中出现的次数
{
int count = 0;
for(int x=0; x<str1.length(); x++)
{
if( ( ( x+str2.length() ) <= str1.length() ) && str1.substring( x,x+str2.length() ).equals(str2) )
{
count++;
x = ( x + ( str2.length()-1 ) );
}
}
return count;
}
演变:
public static int containCount(String s1, String s2)//获取s2在s1中出现的次数
{
int count = 0;
while( s1.contains(s2) )
{
count++;
s1 = s1.substring( s1.indexOf(s2) + s2.length() );
}
return count;
}再演变:(为了不在内存中产生那么多字符串) public static int getSubCount(String str, String key)//获取key在str中出现的次数
{
int count = 0;
int index = 0;
while( ( index=str.indexOf(key,index) ) != -1 )
{
count++;
index = index+key.length();
}
return count;
}
/*
4,获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。
"abcwerthelloyuiodef"
"cvhellobnm"
思路:
1,将短的那个子串按照长度递减的方式获取到。
2,将每获取到的子串去长串中判断是否包含,
如果包含,已经找到!。
*/
思想:( 短串尾减一,整串向后移,每次移动一位,直到end等于短串的length() )
public static String maxSameString(String s1, String s2)//求两个字符串中最大相同子串
{
String max = ( s1.length() > s2.length() ) ? s1 : s2 ;
String min = (max==s1) ? s2 : s1 ;
sop("max = "+max+"........min = "+min);
for(int x=0; x<min.length(); x++)//短的的长度————短字符串能减短的次数。
{
for(int y=0,z=min.length()-x; z<=min.length(); y++,z++)//y是头,z是尾。
{
String temp = min.substring(y,z);
//sop(temp);
if(max.contains(temp))
{
return temp;
}
}
}
return "";
}
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员_日记22_JavaStringTrim练习
- 黑马程序员------<补>String 综合练习
- 黑马程序员——String(字符串练习)
- 黑马程序员——JAVA练习——String、StringBuffer和StringBuilder
- 黑马程序员_<<String练习>>
- 黑马程序员_String练习和基本数据类型包装类
- 黑马程序员_String练习
- 黑马程序员------String(概述、功能、练习、StringBuffer、StringBuilder)
- js的String练习,以及 数组练习
- 黑马程序员 日记四:String、StringBuffer和StringBuilder的比较与总结
- C++程序设计语言练习5.12 对比string和C字符串的优劣
- 黑马程序员 string静态字符串个人统计
- 黑马程序员 Java基础——面向对象思想
- 黑马程序员-java学习之String字符串类
- 黑马程序员--string和stringBuffe和stringBuilder
- “黑马程序员”关于String和面向对象的综合 模拟登陆 玩小游戏
- 黑马程序员_常用API之BufferString、StringBuilder
- acdream 1116 Gao the string! (扩展kmp,dp思想,矩阵优化)
- 《黑马程序员》 累加思想与计数器思想
- 黑马程序员 Java常用类(String,StringBuffer,其他类)