String类是用来描述字符串,他提供了若干方法来操作字符串:
public class StringDemo {
public static void main(String[] args) {
String str1 = "abccbade";
/**
* 字符串中的获取
*/
// 获取字符串的长度
System.out.println("str1的长度是: " + str1.length());
// 获取字符串中某个位置的字符
System.out.println("str1第2个位置的字符: " + str1.charAt(2));
// 获取某个字符在字符串中第一次出现的位置,如果没有这个字符,返回-1
System.out.println("字符c在str1中第一次出现的位置: " + str1.indexOf('c'));
// 从某个位置开始,获取某个字符在字符串中第一次出现的位置,如果没有这个字符,返回-1
System.out.println("从第2位开始,字符c在str1中第一次出现的位置: " + str1.indexOf('b', 2));
// 反向根据字符,获取位置,(从右往左)如果不存在,返回-1
System.out.println(str1.lastIndexOf('b'));
System.out.println(str1.lastIndexOf('b', 2));
/**
* 字符串中的判断
*/
System.out.println("该字符串是以a字符串开头的吗?: " + str1.startsWith("a"));
System.out.println("该字符串是以a字符串结尾的吗?: " + str1.endsWith("a"));
System.out.println("该字符串是空的吗?: " + str1.isEmpty());
System.out.println("该字符串包含字符串abc吗?: " + str1.contains("abc"));
System.out.println("该字符串是否和abcd内容相同" + str1.equals("abcd"));
System.out.println("该字符串是否和aBCcbAde内容相同"
+ str1.equalsIgnoreCase("aBCcbAde"));
/**
* 字符串的转换
*/
// 将字符数组转换成字符串
char[] charArray = { 'a', 'b', 'c', 'd', 'e', 'f' };
System.out.println(new String(charArray));
System.out.println(new String(charArray, 3, 3));
System.out.println(String.copyValueOf(charArray));// 该方法为静态方法
// 将字符串转换成字符数组
System.out.println(str1.toCharArray());
/**
* 字符串的其他方法
*/
// 切割字符串
String str2 = "abc2def2ghi";
String[] strArray = str2.split("2");
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
// 大小写转换以及去掉首尾空格
String str3 = " Hello World ";
System.out.println(str3.toUpperCase());
System.out.println(str3.toLowerCase());
System.out.println(str3.trim());
// 字符串截取
System.out.println(str3.trim().substring(2));
System.out.println(str3.trim().substring(2, 10));
//字符串比较
String str4 = "abcdef";
String str5 = "abbdgf";
System.out.println(str4.compareTo(str5));
}
}
练习:
思路:先判断给定字符串是否是以空格开头,如果是,从第二位截取剩余字符串,循环,得到开头没有空格的字符串,再判断是否以空格结尾,如果是,则从第0为开始,到第length-1位结束截取字符串,循环去掉尾部的空格
public class StringDemo {
public static void main(String[] args) {
String str = " abcdef ";
StringDemo sd = new StringDemo();
System.out.println(sd.trimDemo(str));
}
public String trimDemo(String str) {
while (str.startsWith(" ")) {
str = str.substring(1);
}
while (str.endsWith(" ")) {
str = str.substring(0, str.length() - 1);
}
return str;
}
}
思路:先把字符串转换成一个字符数组,再新建一个空的同样长度的字符数组,依次将源字符数组翻转过来添加到新数组中,让新数组转化成字符串返回
public class StringDemo {
public static void main(String[] args) {
String str = " abcdef ";
StringDemo sd = new StringDemo();
System.out.println(sd.turnString("abcdef"));
}
public String turnString(String str) {
char[] charArray = str.toCharArray();
char[] newCharArray = new char[charArray.length];
for (int i = 0; i < charArray.length; i++) {
newCharArray[(charArray.length - i - 1)] = charArray[i];
}
return new String(newCharArray);
}
}
思路:那么设置一个count变量用来存放出现的次数,再设置一个flag变量来存放字符串出现的位置,使用indexOf方法来判断是否存在,如果返回的不是-1,那么count+1,indexOf可以获取到出现的位置,那么从出现的(位置+字符串的长度)开始截取子字符串开始继续判断
public class StringDemo {
public static void main(String[] args) {
String str1 = "huhuiikshuiadkhuihuinfvkasdhuikfhhui";
String str2 = "hui";
StringDemo sd = new StringDemo();
System.out.println(sd.subStringCount(str1, str2));
}
public int subStringCount(String str1, String str2) {
int count = 0; //用来存放出现次数
int flag = 0; //用来存放出现位置
while (str1.indexOf(str2) != -1) { //如果返回值不为-1,说明是存在的
count += 1; //出现次数+1
flag = str1.indexOf(str2); //获取到存放的位置
str1 = str1.substring(flag + str2.length()); //从存放位置+字符串长度 处开始截取子字符串
}
return count;
}
}
思路:假设str1为主,str2为附,得到所有str2的子字符串存到一个list中去,然后循环判断str1中是否存在这些子字符串,将存在的放到新的list中去,再判断新list中最长的字符串是多长,然后再将这个长度的字符串拿出来,这就是公共最长字符串
public class StringDemo {
public static void main(String[] args) {
String str1 = "abcdefghijklmnopqrst";
String str2 = "cd34cde5691mno26";
StringDemo sd = new StringDemo();
sd.getMaxString(str1, str2);
}
public void getMaxString(String str1, String str2) {
List<String> subString = new ArrayList<String>(); // 用来存放str2的所有子字符串
List<String> str1ContainsStr2 = new ArrayList<String>();
for (int end = str2.length(); end > 0; end--) { // 用来设置去str2子字符串的subString方法起点位置
for (int start = 0; start < end; start++) { // 用来设置去str2子字符串的subString方法终点位置
subString.add(str2.substring(start, end)); //将str2的子字符串添加到list中
}
}
int tmp = 0; //设置一个临时变量来存放长度
for (String string : subString) {
if (str1.contains(string)) { //如果str1中存在str2的子字符串,说明是公共字符串
str1ContainsStr2.add(string); //那么添加到公共字符串list中
if (string.length() > tmp) { //获取到最大长度的公共字符串的长度
tmp = string.length();
}
}
}
for (String string : str1ContainsStr2) { //找到公共字符串中最长的字符串
if (string.length() == tmp) {
System.out.println(string);
}
}
}
}
思路:将一个字符串转化成一个字符数组,再让这个字符数组翻转存储到一个新的字符数组中,将这个新的字符数组转成字符串
public class StringDemo {
public static void main(String[] args) {
String str = "123456789";
StringDemo sd = new StringDemo();
System.out.println(sd.overturn(str));
}
public String overturn(String str) {
char[] charArray = str.toCharArray();
char[] newCharArray = new char[charArray.length];
int tmp = 0;
for (int i = charArray.length - 1; i >= 0; i--) {
newCharArray[tmp] = charArray[i];
tmp++;
}
return new String(newCharArray);
}
}
可以将StringBuffer看成是一个可以存放字符串的容器,和String不同的是,这个容器可以改变长度,并且容器内可以存放多种类型数据,并且最终可以通过toString方法转化为String类型。
StringBuffer的增删查改
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer();
sb2.append("xyz");
/**
* StringBuffer的增
*/
sb.append("123");
System.out.println(sb); // 输出结果为123
sb.append(true);
System.out.println(sb); // 输出结果为123true
sb.append(123).append(sb2);
System.out.println(sb); // 输出结果为123true123xyz
sb.insert(1, "mmm");
System.out.println(sb);// 输出结果为1mmm23true123xyz
/**
* StringBuffer的删
*/
sb.deleteCharAt(4);
System.out.println(sb); // 输出结果为1mmm3true123xyz
sb.delete(1, 4);
System.out.println(sb); // 输出结果为13true123xyz(含头不含尾)
/**
* StringBuffer的查
*/
System.out.println(sb.length()); // 输出结果为12
System.out.println(sb.charAt(10)); // 输出结果为y
System.out.println(sb.indexOf("true")); // 输出结果为2
System.out.println(sb.indexOf("1", 2));// 输出结果为6
System.out.println(sb.substring(2, 4));// 输出结果为tr(含头不含尾)
/**
* StringBuffer的改
*/
sb.setCharAt(0, '2');
System.out.println(sb); // 输出结果为23true123xyz
System.out.println(sb.reverse());// 输出结果为zyx321eurt32
System.out.println(sb.replace(1, 2, "hello"));// 输出结果为zhellox321eurt32(含头不含尾)
}
}