import org.junit.Test;
import java.util.Locale;
/**
* @Author :ygj
* @Date :Created in 2021/11/20 11:20
* @Description:String 类测试
* @Modified By:
*/
public class Demo1 {
static String s1 = new String("111:222:124:aaa:bbb:ccc: :: :");
public void test1() {
//从下标为一开始 截取1 之后的所有字符 (包含1这个位置),超出范围报异常
String a1 = s1.substring(1);
System.out.println(a1);
//参数 某个下标开始 某个下标结束,左闭右开(m,n] 超出范围报异常 如果 m,n相同 无法取值
String a2 = s1.substring(2, 4);
System.out.println(a2);
//以包含的字符分割
String[] a3 = s1.split(":");
System.out.println(a3.toString());
//以没有包含的字符分割
String[] a4 = s1.split("%");
System.out.println("a4.length:" + a4.length + ",a4.toString():" + a4.toString());
/**
* limit参数控制应用模式的次数,因此会影响结果数组的长度。
* 如果限制n大于零,则该模式将最多应用n - 1 次,数组的长度将不大于n ,
* 并且数组的最后一个条目将包含最后一个匹配的分隔符之外的所有输入。
* 如果n为非正数,则该模式将被应用尽可能多的次数,并且数组可以具有任意长度。
* 如果n为零,则该模式将被应用尽可能多的次数,数组可以具有任意长度,并且将丢弃尾随的空字符串。
*
* 例如,字符串"boo:and:foo"使用这些参数产生以下结果:
*
* 正则表达式 限制 结果
* : 2 { "boo", "and:foo" }
* : 5 { "boo", "and", "foo" }
* : -2 { "boo", "and", "foo" }
* ○ 5 { "b", "", ":and:f", "", "" }
* ○ -2 { "b", "", ":and:f", "", "" }
* ○ 0 { "b", "", ":and:f" }
*/
//快记 : 正数 (n) 匹配 n-1 次,结果数组长度为<=n 并且如果最后一个字符是分隔符 会保留一个”“ 空串
// 负数 匹配尽可能多的次数,并且如果最后一个字符是分隔符 会保留一个”“ 空串
// 0 匹配尽可能多的次数,丢弃尾随的空字符串(可能有多个)
String[] a5 = s1.split(":", 2);//正数2
System.out.println("limit:2->a5.length:" + a5.length + ",a5.toString():" + a5.toString());
String[] a6 = s1.split(":", 8);//正数8
System.out.println("limit:8->a6.length:" + a6.length + ",a6.toString():" + a6.toString());
String[] a7 = s1.split(":", -2);//负数-2
System.out.println("limit:-2->a7.length:" + a7.length + ",a7.toString():" + a7.toString());
//
String[] a8 = s1.split(":", 0);//0 等同于s1.split(":")
System.out.println("limit:0->a8.length:" + a8.length + ",a8.toString():" + a8.toString());
//String 重写了 equals 方法 先比较地址值,在比较每个字符。所以hashMap(以String 为key的) 放不同对象的Sting 为key, 但字符相同会被认为是同一个key
String s2 = new String("aaa:bbb:ccc: :: :");
boolean a9 = s1.equals(s2);
boolean a10 = s1 == s2;
System.out.println("s1.equals(s2):" + s1.equals(s2) + ",s1==s2:" + a10);
//子串串全量替换 将调用者 s1 的”:“ 全部替换为"lol"
String a11 = s1.replaceAll(":", "lol");
System.out.println(a11);
//字符替换
String a12 = s1.replace(':', 'A');
System.out.println(a12);
//字符替换
String a13 = s1.replace("aa", "bb");
String a14 = s1.replace(":", "&");
System.out.println(a13 + "," + a14);
//大写转换
String a15 = s1.toUpperCase();
System.out.println(a15);
//大写转换 指定的语言 ,转换后的大小长度不一定为原来的长度,没有体验到转换效果???
String a16 = s1.toUpperCase(Locale.CHINA);
System.out.println(a16);
//忽略大小写进行比较
String s3 = "111:222:124:AAA:BBB:CCC: :: :";
boolean a17 = s1.equalsIgnoreCase(s3);
System.out.println(a17);
//获取字符长度 空格也算
int a18 = s1.length();
System.out.println(a18);
//测试 半角和全角空格的长度 中文字符的长度
System.out.println("半角:" + " ".length() + ",全角:" + " ".length() + ",中文字符的长度:" + "中".length());
//空字符串 和空格字符串是有差别的 半角空格
System.out.println("".length() + " ".length());
//todo
int i = 10;
}
@Test
public void tsetR() {
//大写转换 指定的语言 ,转换后的大小长度不一定为原来的长度
String a16 = s1.toUpperCase(Locale.CHINA);
String s2 = "一,二";
System.out.println(a16);
System.out.println(s2.toUpperCase(Locale.CHINESE));
}
@Test
public void tsetR1() {
//半角:1,全角:1,中文字符的长度:1
System.out.println("半角:" + " ".length() + ",全角:" + " ".length() + ",中文字符的长度:" + "中".length());
}
}
关于java字符串处理的那些事儿
于 2021-11-25 15:39:35 首次发布