String类和StringBufferStringBuilder常用方法

    技术2025-12-11  11

    关Java JDK中内置的一个类:java. lang. String的介绍

    1、String表示字符串类型,属于引用数据类型,不属于基本数据类型。 2、在java 中随便使用双引号括起来的都是String对象。例如: “abc”,“def”, “hello world!” ,这是3个String对象。 3、java 中规定,双引号括起来的字符串,是不可变的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也 4、在JDK 当中双引号括起来的字符串,例如: “abc” “def” 都是直接存储在“方法区”的“字符串常量池”当中的。 为什么SUN公司把字符串存储在一个“字符串常量池”当中呢。因为字符串在实际的开发中使用太频繁。为了执行效率, 所以把字符串放到了方法区的字符串常量池当中。 对string在内存存储方面的理解: 第一:字符串一旦创建不可变。 第二:双引号括起来的字符串存储在字符串常量池中。 第三:字符串的比较必须使用equals方法。 第四: string已经重写了tostring ()和equals()方法。

    String类常用的方法

    1.endsWith:判断字符串是否以指定的后缀结束

    //判断当前字符串是否以某个字符串结尾 返回ture或者false System.out.println("test.txt".endsWith(".java"));//false System.out.println("test.txt".endsWith(".txt"));//true System.out.println("abcdefg".endsWith("efg"));//true

    2.startsWith,判断字符串是否以指定的前缀开始

    //判断某个字符串是否以某个子字符串开始 System.out.println("abcdef".startsWith("abc"));//true System.out.println("abcdef".startsWith("abd"));//false equals,字符串相等比较,不忽略大小写 //比较两个字符串必须使用equsl方法,string类的equls方法已经重写好了,所以比较的是内容 //eqlusl方法有没有调用compareTo方法 System.out.println("abc".equals("abc"));//true equalsIgnoreCase,字符串相等比较,忽略大小写 //判断两个字符串是否相等忽略大小写 System.out.println("Abc".equalsIgnoreCase("aBC"));//true indexOf,取得指定字符在字符串的位置 //判断某个子字符串在当前字符串中第一次出现处的索引(下标) System.out.println("phpjavaokhuobi".indexOf("java"));//3 lastIndexOf,返回最后一次字符串出现的位置 System.out.println("abcdefg".lastIndexOf("efg"));//4 length,取得字符串的长度 //判断字符串长度 用的是length方法 判断数组长度是lenght属性 System.out.println("abcde".length());//5 replaceAll,替换字符串中指定的内容 //替换字符串 String e = "http://wwww.baidu.com".replace("wwww","xxxx");//http://xxxx.baidu.com System.out.println(e); String f = "111".replace("1", "2");//222 System.out.println(f); split,根据指定的表达式拆分字符串 //拆分字符串成数组 String[] ym = "abcde-fkglgl-asdas".split("-"); for ( int i = 0 ; i < ym.length ; i++) System.out.println(ym[i]); //abcde //fkglgl //asdas //可以继续向下拆分 substring,截子串,左边包含 右边不包含 //截取字符串 参数是截取开始下标 System.out.println("www.baidu.com".substring(4));//baidu.com System.out.println("www.baidu.com".substring(4, 9));//左边包含 右边不包含 baidu trim,去前后空格 //去除字符串前后空白 System.out.println(" abc edsada ".trim());//abc valueOf,将其他类型转换成字符串 //String 中有一个方法是静态的,不需要new对象; //将非字符串转化成字符串 String s1 = String.valueOf(100); System.out.println(s1);//100字符串 contains,判断前边这个字符串包含不包含后边这个字符串,可以看出是连续的字符串是否包含 //判断前边这个字符串包含不包含后边这个字符串 System.out.println("HelloWorld.java".contains(".java"));//true System.out.println("www.baidu.com".contains("badu"));//false

    15.isEmpty 判断某个字符串是否内容为空

    //判断某个字符串是否为空 String s= ""; String d = "1"; System.out.println(s.isEmpty());//true System.out.println(d.isEmpty());//false

    16.toLowerCase() 将大写字符串转换成小写

    //将大写字符串转换成小写 System.out.println("ABC".toLowerCase());

    17.toCharArray() 把字符串转换成char 数组

    //吧字符串转换成char 数组 char [] c = "我是中国人".toCharArray(); for ( int i = 0 ; i < c.length ; i ++) System.out.println(c[i]);

    StringBuffer和StringBulider

    StringBuffer称StringBuilder的区别? StringBuffer中的方法都有: synchronized关键字修饰。StringBuffer在多线程环境下运行是安全的。 StringBuilder中的方法都没有: synchronized关键字修饰,表StringBuilder在多线程环境下运行是不安全的。 如何优化StringBuffer的性能? 在创建StringBuffer的时候尽可能给定-个初始化容量。 最好减少底层数组的扩容次数。预估计一下,给一个大一些初始化容量。 思考:我们在实际的开发中,如果需要进行字符串的频繁拼接,会有什么问题? 因为java中的字符串是不可变的,每- -次拼接都会产生新 字符串。 这样会占用大量的方法区内存。造成内存空间的浪费。 String s = “abc”; s += “hello”; 就以_上两行代码,就导致在方法区字符串常量池当中创建了3个对象: “abc” . “hello” “abchello” StringBuffer是字符串缓冲区,是一个容器。 特点: 1,长度是可变化的。 2,可以字节操作多个数据类型。 3,最终会通过toString方法变成字符串。 常用方法 StringBuffer() 构造一个字符串缓冲区,其中没有字符,初始容量为16个字符。 append​ 添加boolean,String,Int 等等…参数的字符串表示形式追加到序列中。 substring​(int start, int end) 返回一个新的 String ,其中包含当前包含在此序列中的字符的子序列。 Insert ​向字符串中插入各种类型的数据 等可以参考帮助文档

    相关面试试题

    下面总共几个对象 String s1 = new String( original: “he11o”); String s2 = new String( original: “hel11o”); 一共3个对象: 方法区字符串常量池中有1个: “hello” 堆内存当中有两个String对象。一共3个。

    字符串不可变是什么意思? 是说双引号里面的字符串对象一且 创建不可变。 String s = “abc”; s变量是可以指向其它对象的。字 符串不可变不是说以上变量s不可变。说的是"abc ”这个对象不可变 S = “xyz”; 判断数组长度和判断字符串长度不一样 判断数组长度是Length属性,判断字符串长度是length()方法。. System. out . println(“abc” .1ength()); // 3

    Processed: 0.017, SQL: 9