package day03;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import org.junit.Test;
public class StringDemo {
@Test
public void test01() {
// 1.调用String方法API
// 创建String对象
String str = “hello”;
String s1 = new String(); // “”
String s2 = new String(“hello”); // “hello”
String s3 = new String(“hello”);
String str1 = “hello”;
System.out.println(s1 == s2);
System.out.println(str == s2);
System.out.println(s3 == s2);
// String类将equals重写过了
System.out.println(s3.equals(s2));
System.out.println(s3.equals(str));
// JDK提供了一个字符串的常量池
System.out.println(str == str1);
}
@Test
public void test02() {
String str = "hello"; // 常量池
// 字符串字面量 拼接 -> 常量池
String s1 = "he" + "llo";
String s2 = "he";
// 变量 + 字面量 -> new 对象
String s3 = s2 + "llo";
System.out.println(str == s1);
System.out.println(str == s3);
// 结论:字符串在特定场合下面可以用 == 比较
// 但是不建议使用==,建议使用equals
}
@Test
public void test03() {
String s1 = "hello";
// 字符串拼接
s1 = s1.concat("hi");
System.out.println(s1);
// 获得输入的邮箱对应的用户名 wrerwer@163.com
String email = "324wewearyyu@163.com";
// 字符串截取 - 从指定下标开始,截取到结束
String user = email.substring(5);
System.out.println(user);
// 字符串截取 - 从指定下标开始,到指定下标结束(前包含、后不包含)
user = email.substring(0, 7);
System.out.println(user);
// 获得@第一次出现所在的下标位置
int index = email.indexOf("@");
user = email.substring(0, index);
System.out.println(user);
// 获得@最后一次出现的下标位置
index = email.lastIndexOf('@');
user = email.substring(0, index);
System.out.println(user);
}
@Test
public void test04() {
String str = "qnmlg b, 你真的是个大sb";
str = str.replace("qnmlgb", "**");
System.out.println(str);
}
// 都变大写 都变小写 忽略大小写比较
// 去除左右两边空格 ' ' \n \t \r
@Test
public void test05() {
String email = "ere334@163.com";
// ^[a-zA-Z]\w{5,17}@163\.com$
String regex = "^[a-zA-Z]\\w{5,17}@163\\.com$";
System.out.println(regex);
boolean ismatches = email.matches(regex);
System.out.println(ismatches);
}
@Test
public void test06() {
String str = "qnmlgb, 你真的是个大sbsb, 真是nc";
// (qn)?(mlgb|sb|nc)*
String regex = "(qn)?(mlgb|sb|nc)+";
str = str.replaceAll(regex, "**");
System.out.println(str);
}
@Test
public void test07() {
String ip = "192.168.6.66";
// 获得每一段的数字
String regex = "\\.";
String[] ss = ip.split(regex);
System.out.println(Arrays.toString(ss));
String word = "hello hi, .how are you? I'm fine!";
// . , ! 空格 ""
// [ ,\.!\?]+
regex = "[ ,\\.!\\?]+";
String[] words =word.split(regex);
System.out.println(words.length);
// ftp->temp->resource->api->正则表达式.zip
}
@Test
public void test08() throws UnsupportedEncodingException {
char c = 'c';
c = (char) 97;
c = '\u4e2d'; // Unicode编码/字符集 - Java-JVM
System.out.println(c);
// byte -128~127
// char 0~2^16-1 = 65535
// \u0000~\uffff
String str = "哈哈";
// 字符串转变成字节数组 - 系统级编码(GBK/UTF-8)
byte[] bs = str.getBytes(); // - 系统默认编码
System.out.println(Arrays.toString(bs));
bs = str.getBytes("gbk"); // 根据指定的gbk字符集来拆解字符串
System.out.println(Arrays.toString(bs));
}
@Test
public void test09() throws UnsupportedEncodingException {
byte[] bs = {-27, -109, -120, -27, -109, -120};
// 编码:将字节数组转换成字符串
String str = new String(bs); // 默认系统编码 - utf-8
System.out.println(str);
// 根据指定的字符集来编码
String str1 = new String(bs, "gbk");
System.out.println(str1);
// 解决str1的乱码问题 先解码 -> 再编码
str1 = new String(str1.getBytes("gbk"), "utf-8");
System.out.println(str1);
}
}