存一份代码
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class String000 {
public static void main22(String[] args) {
System.out.println(isL("Admin"));//一个 new String ,一个在常量池
}
public static boolean isL(String str){
return str.toLowerCase() == "admin";
}
public static void main21(String[] args) {
String str = "abcde";
String ret = str.concat("ABC");//拼接的结果不入常量池
System.out.println(ret);
}
public static void main20(String[] args) {
String str = "abcdefGH123";//转大写,数字不转
String ret = str.toUpperCase();
System.out.println(ret);
String ret1 = str.toLowerCase();//转小写,数字不转
System.out.println(ret1);
}
public static void main19(String[] args) {
String str = " abd de fg ";
String ret = str.trim();//去掉左右的空格,中间不去除空格
System.out.println(ret);
}
public static void main18(String[] args) {
String str = "abcdefg";
String sub1 = str.substring(2,4);//2号位置提取字串,4号位置截止 [2,4)
System.out.println(sub1);
}
public static void main17(String[] args) {
/*String str = "2022 01 01";
String[] strings = str.split(" ");//以空格分割
for (String s:strings) {
System.out.println(s);
}*/
/*String str1 = "2022.01.01";
String[] strings1 = str1.split("\\.",2);//.比较特殊需要转义,\也比较特殊,也需要转义
//limit 限制以指定字符分割,要分几次
for (String ss:strings1) {
System.out.println(ss);
}*/
String str2 = "abc.de&fg#hi";
String[] strings2 = str2.split("\\.|&|#");// 使用 | 一次性分割
for(String sss : strings2){
System.out.println(sss);
}
}
public static void main16(String[] args) {
String str = "ababcabcdabcde";
String str1 = "ababcabcdabcde";
String str2 = "ababcabcdabcde";
String str3 = "ababcabcdabcde";
System.out.println(str.replace('a', 'g'));//a 全替换为 g
System.out.println(str1.replace("bc", "BC"));// bc 全替换为 BC
System.out.println(str2.replaceAll("abc", "ABC"));// abc 全替换为 ABC
System.out.println(str1.replaceFirst("ab", "AA"));// 只替换第一次出现的
}
public static void main15(String[] args) {
String str = "ababcabcd";
String tmp = "abc";
System.out.println(str.startsWith("a", 3));//是否以a开头,并且从下标3位置开始判断
System.out.println(str.endsWith("cd"));//是否以指定字符或字符串结尾
}
public static void main14(String[] args) {
String str = "ababcabcd";
String tmp = "abc";
boolean flg = str.contains(tmp);
System.out.println(flg);
int index = str.indexOf(tmp);//获取第一次出现指定字符串的第一个位置
int index1 = str.indexOf(tmp,3);//从第二个位置开始找,下标由0开始
System.out.println(index1);
int index3 = str.lastIndexOf(tmp,4);//从后往前数第五个位置开始找
System.out.println(index3);
}
public static void main13(String[] args) {
String str1 = "ABC";
String str2 = "abc";
int ret = str1.compareTo(str2);//只比较前两个,然后比较长度,前两个相同,长度不同就返回长度差
System.out.println(ret);// A-a = -32
System.out.println(str1.equalsIgnoreCase(str2));//忽略大小写比较
}
public static void main11(String[] args) throws UnsupportedEncodingException {
byte[] bytes = {97,98,99,100};
String str = new String(bytes,1,3);
System.out.println(str);//转换,输出 bcd
/*String str2 = "abcd";
byte[] bytes1 = str2.getBytes();//字符串转数组
System.out.println(Arrays.toString(bytes1));*/
String str2 = "abcd";
byte[] bytes1 = str2.getBytes("GBK");//字符串转数组
System.out.println(Arrays.toString(bytes1));
}
public static void main10(String[] args) {
String str = "165abc";
System.out.println(isNum(str));
}
public static boolean isNum(String s){
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
boolean flg = Character.isDigit(ch);//确定指定的字符是否是数字
if(flg == false){
return false;
}
/*if(ch < '0' || ch > '9'){
return false;
}*/
}
return true;
}
public static void main9(String[] args) {
/*char[] val = {'a','b','c'};
String str = new String(val);
System.out.println(str);*/
/*char[] val1 = {'a','b','c','d','e'};
String str1 = new String(val1,1,3);//偏移量为1开始,取三个字符 形成字符串
System.out.println(str1);// 输出 bcd*/
String str2 = "hello";
char ch = str2.charAt(1);//获取到1下标的字符
System.out.println(ch);
char[] chars = str2.toCharArray();//把str2 指向的字符串对象变成字符数组
System.out.println(Arrays.toString(chars));
}
public static void main8(String[] args) {
//每次拼接都要产生对象,它本身是不变的
//字符串的拼接,会被优化为 StringBuilder 对象,每次 append ,然后又 toString,浪费时间
String str1 = "hello";
str1 = str1 + " world";
str1 += "!!!";
System.out.println(str1);
}
public static void main7(String[] args) {
//assert s != null;
String str1 = null;//不指向任何对象
String str2 = "";//指向字符串为空
System.out.println(str1 == str2);
}
public static void main6(String[] args) {
//数组的整体赋值只有一次机会,就是在定义的时候
int[] arr = {1,2,3,4,5};
arr = new int[] {4,5,6,7};//将 arr 指向新的地址
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void main5(String[] args) {
String str1 = new String("1")+new String("1");
str1.intern();//手动入池
//顺序不能换,若池内有11 手动入池就会失败
String str2 = "11";
System.out.println(str1 == str2);
}
public static void main4(String[] args) {
String str1 = "11";
String str2 = new String("1")+new String("1");
System.out.println(str1 == str2);
}
public static void main3(String[] args) {
String str1 = "abc";
String str2 = "a"+"bc";//两个都是常量,在编译的时候已经确定好是“abc”了
System.out.println(str1 == str2);
String str3 = "ab";
String str4 = str3+"c";//str3 是一个变量,编译的时候不知道是什么
//str4 不会在常量池里
System.out.println(str1 == str4);
}
public static void main2(String[] args) {
/*
class常量池:int a = 10;
运行时常量池:当程序把编译好的字节码文件加载到 JVM 中后,会生成一个运行时常量池【方法区】,实际上是class文件常量池
字符串常量池:主要存放字符串常量 ——> 字符串常量池,本质上是一个哈希表
双引号引起来的字符串常量 从 JDK1.8 开始,放在了堆里面
池意义:提高效率
*/
String str1 = "hello";//双引号引起来的放到字符串常量池,
String str2 = new String("hello");
System.out.println(str1 == str2);//判断的是地址,地址肯定不相等
System.out.println(str1.equals(str2));//判断的是内容
}
public static void main1(String[] args) {
String str1 = "abc";//指向"abc"
String str2 = str1;//指向“abc”
System.out.println(str2);
str1 = "ABC";//改为指向"ABC"
System.out.println(str2);//仍指向“abc”
}
}