天天看点

Java String与其他类型之间的转化及其算法练习

1.字符串 与基本数据类型、包装类之间转换

 ①字符串 --->基本数据类型、包装类:调用相应的包装类的parseXxx(String str);

 ②基本数据类型、包装类--->字符串:调用字符串的重载的valueOf()方法

 2.字符串与字节数组间的转换

 ①字符串---->字节数组:调用字符串的getBytes()

 ②字节数组---->字符串:调用字符串的构造器

3.字符串与字符数组间的转换

 ①字符串---->字符数组:调用字符串的toCharArray();

 ②字符数组---->字符串:调用字符串的构造器

练习题:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Test;

public class StringDemo {
	@Test
	public void testTrime() {
		String str = "     abcdefg               ";
		String str1 = myTrime(str);
		System.out.println(str1);
	}
	
	//1.模拟一个trim方法,去除字符串两端的空格。
	public static String myTrime(String str) {
		int start = 0;
		int end = str.length() - 1;
		
		while(str.charAt(start) == ' ') {
			start++;
		}
		
		while(str.charAt(end) == ' ') {
			end--;
		}
		
		return str.substring(start, end + 1);
	}
	
	@Test
	public void testReverse() {
		String str = "abcdefg";
		System.out.println(reverseString(str, 3, 5));
		System.out.println(reverseString2(str, 5, 5));
	}
	
	//2.将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg”(方法一)
	public static String reverseString(String str, int start, int end) {
		char[] c = str.toCharArray();
		return reverseArray(c, start, end);
	}
	
	public static String reverseArray(char[] c, int start, int end) {
		for (int i = start , j = end; i < j; i++ , j--) {
			c[i] = (char) (c[i] ^ c[j]);
			c[j] = (char) (c[i] ^ c[j]);
			c[i] = (char) (c[i] ^ c[j]);
		}
		return new String(c);
	}
	
	//方法二:
	public static String reverseString2(String str, int start, int end) {
		String str1 = str.substring(0, start);
		for (int i = end; i >= start; i--) {
			str1 += str.charAt(i);
		}
		str1 += str.substring(end + 1);
		
		return str1;
	}
	
	@Test
	public void testTime() {
		String str1 = "abcdabcab";
		String str2 = "ab";
		int time = getTime(str1, str2);
		System.out.println(time);
	}
	
	//3.获取一个字符串在另一个字符串中出现的次数。判断str2在str1中出现的次数
	public static int getTime(String str1, String str2) {
		int count = 0;
		int len;
		while((len = str1.indexOf(str2)) != -1) {
			count++;
			str1 = str1.substring(len + 1);
		}
		return count;
	}
	
	@Test
	public void testGetMaxSubString() {
		List<String> strs = getMaxSubString("abslkdjglabceujnh", "abcehhujnh");
		System.out.println(strs);
	}
	
	//4.获取两个字符串中最大相同子串。
	public static List<String> getMaxSubString(String str1, String str2) {
		String maxStr = str1.length() > str2.length()? str1:str2;
		String minStr = str1.length() < str2.length()? str1:str2;
		int len = minStr.length();
		List<String> list = new ArrayList<String>();
		for (int i = 0; i < len; i++) {//最小串每次要减少的字符个数
			for (int j = 0, k = len - i; k <= len; j++, k++) {
				String str = minStr.substring(j, k);
				if(maxStr.contains(str)) {
					list.add(str);
				}
			}
			if(list.size() != 0) {
				return list;
			}
		}
		
		return null;
	}
	
	@Test
	public void testSort() {
		String str = "uerngalsowkdjgx";
		System.out.println(sort(str));
	}
	
	//5.对字符串中字符进行自然顺序排序。
	public static String sort(String str) {
		char[] c = str.toCharArray();
		Arrays.sort(c);
		return new String(c);
	}
	
	@Test
	public void testPartReverse() {
		System.out.println(partReverse("I am a student!"));
	}
	
	//练习:I am a student!   写一个方法:实现输出 !student a am I
	public static String partReverse(String str) {
		List<String> list = getWords(str);
		//Collections.reverse(list);//不用多一次list的反转操作更效率
		String revstr = "";
		for (String string : list) {
			//revstr += string;//若上面使用了list的反转,则使用这句
			revstr = string + revstr;
		}
		return revstr;
	}
	
	public static List<String> getWords(String str) {
		List<String> list = new ArrayList<String>();
		char[] c = str.toCharArray();
		String temp = "";
		for (int i = 0; i < c.length; i++) {
			if(Character.isLetter(c[i])) {
				temp += c[i];
			} else {
				if(!"".equals(temp)) {
					list.add(temp);
				}
				temp = "";
				list.add(String.valueOf(c[i]));
			}
		}
		
		return list;
	}
}