- /*
- * Test the String exercises.
- * 1: 模仿trim方法 public String trim()
- * 2: 实现字符串反转;将字符串中指定部分反转
- * 3: 获取一个字符串在另一个字符串中出现的次数
- * 4: 获取两个字符串中最大相同子串
- * @author: Lillian Mao
- *
- */
- class StringTool{
- /*
- * 模仿trim方法 public String trim(),将字符串中前后的空格去掉。
- * 1. 先将字符串转换为char[] 数组
- * 2. 从前面开始找第一个不是空格的字符,记录下标
- * 3. 从后面找第一个不是空格的字符,记录下标
- * 4. 从原来字符串中截取两个下标中间的部分,注意subString(start, end)中end应该传递后面找到的下标加一的值。
- */
- public String myTrim(String inputStr){
- int max = inputStr.length()-1;
- int min = 0;
- char[] array = inputStr.toCharArray();
- while(min<=max && array[min] == ' ')
- min++;
- while(min<=max && array[max] == ' ')
- max--;
- String s = inputStr.substring(min, max + 1);
- return s;
- }
- /*
- * 将一个字符串指定部分进行反转。
- * 1. 将字符串转换成字符数组
- * 2. 将要反转的部分首尾互换
- * 3. 将数组转换为字符串
- *
- */
- public String reverse(String input, int start, int end) {
- char[] array = input.toCharArray();
- if(start <0 || end >= input.length()){
- throw new ArrayIndexOutOfBoundsException();
- }
- while(start < end){
- char c = array[start];
- array[start] = array[end];
- array[end] = c;
- start++;
- end--;
- }
- return new String(array);
- }
- /*
- * 获取一个字符串在另一个字符串中出现的次数
- * 1. 设置一个计数器c,一个起始位置s,初始化为0。
- * 2. 如果找到一次,c++, 起始位置设为本次找到的子字符串的末尾。继续下次循环,直至index 为-1
- */
- public int GetCount(String longStr, String shortStr){
- int count=0, start=0, index =0;
- while((index = longStr.indexOf(shortStr,start))!= -1){
- count++;
- start = index + shortStr.length();
- }
- return count;
- }
- /*
- * 获取两个字符串中最大相同子串
- * 1. 找到比较小的那个字符串
- * 2. 将较小字符串一次递减,去掉前面或者后面n个字符
- * 3. 在较大字符串中查找减小后的字符串,若找到返回该字符串
- */
- public String largestSub(String str1, String str2){
- char[] array = str2.toCharArray();
- if(str1.length()<= str2.length()){
- array = str1.toCharArray();
- str1=str2;
- }
- String sub = null;
- for (int len = array.length; len >0; len--) {
- for(int start =0; start <= str2.length()-len; start++){
- sub = String.copyValueOf(array, start, len);
- if(str1.contains(sub))
- return sub;
- }
- }
- sub = null;
- return sub;
- }
- }