当前位置:网站首页 > Java基础 > 正文

java基础类及构造



引言

字符串就是一连串的字符序列,Java提供了String、StringBuffer和StringBuilder三个类来封装对字符串,并提供了系列方法来操作字符串对象。

  • String类是不可变类的;
  • StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append、insert、reverse、setCharAt、setLength等方法可以改变这个字符串对象的字符序列;一旦通过StringBuffer生成了java基础类及构造最终想要的字符串,就可以调用它的toString方法将其转换为一个String对象,使其不可变;
  • JDK1.5又新增了一个StringBuilder类,它也代表了字符串对象,StringBuffer和StringBuilder基本相同,构造器和方法也一样,不同点是:StringBuffer是线程安全的,StringBuilder是线程不安全的,但是性能更高;所以通常情况下,创建一个内容可变的字符串,应优先选择StringBuilder类;

下面分别介绍一下这三种字符串类的一些常用方法(StringBuffer和StringBuilder方法基本相同,一起介绍了)

String类

举个例子:

 String s1 = new String("Hello"); String s2 = "World" + s1; 

如果理解不了,那么就记住一点:String类字符串一旦创建不可变。

String类构造方法

记住这几种就可以了;

String常用方法:

简单介绍的方法

length

注意:数组里面的length是属性,这里的length()是方法;

isEmpty

注意:判断的是空字符串""(即length()为0),而不是null,如果是null会造成空指针异常;

详细介绍的方法

contians

例如:

 System.out.println("HelloWorld".contains("World")); // 输出true System.out.println("HelloWorld".contains("Java")); // 输出false 

endsWith

例如:

 System.out.println("Java.txt".endsWith("Java")); // 输出false System.out.println("Java.txt".endsWith(".txt")); // 输出true 

startsWith

例如:

 System.out.println("Java.txt".startsWith("Java")); // 输出true System.out.println("Java.txt".startsWith(".txt")); // 输出false 

equalsIgnoreCase

例如:

 System.out.println("ABc".equalsIgnoreCase("abC")); // true System.out.println("aABc".equalsIgnoreCase("abC")); // false 

其实这个功能很常见,就比如我们输入验证码时有些情况就自动忽略了你输入字母的大小写;

getBytes

例如:

 byte[] b = "abcde".getBytes(); for (var i : b) System.out.print(i + " "); // 输出:97 98 99 100 101 

indexOf

例如:

 System.out.println("HelloWorld".indexOf("llo")); // 输出:2 System.out.println("HelloWorld".indexOf("ol")); // 输出:-1 

lastIndexOf

例如:

 System.out.println("HelloWorld".lastIndexOf("l")); // 输出:8 System.out.println("HelloWorld".lastIndexOf("ol")); // 输出:-1 

replace

例如:

 String s = "Hello World World".replace("World", "Java"); System.out.println(s); // 输出:Hello Java Java 

split

例如:

 String[] s = "year:2021-month:09-day:15-time:23:30".split("-"); // 以字符串"-"进行拆分; for (var i : s) System.out.println(i); /* 输出: year:2021 month:09 day:15 time:23:30 */ 

substring(一个参数)

例如:

 String s = "Today is a good day!"; System.out.println(s.substring(9)); // 输出:a good day! 

substring(两个参数)

例如:

 String s = "Today is a good day!"; System.out.println(s.substring(9, 15)); // 输出:a good 

toCharArray

例如:

 char[] s = "Today is a good day!".toCharArray(); for (var i : s) System.out.print(i + " "); // 输出:T o d a y i s a g o o d d a y ! 

toLowerCase

例如:

 System.out.println("HELLOWORLD".toLowerCase()); // 输出:helloworld 

toUpperCase

例如:

 System.out.println("helloworld".toUpperCase()); // 输出:HELLOWORLD 

trim

例如:

 System.out.println(" hello world ".trim()); // 输出:hello world 

有时候你要使用搜索引擎搜索时,如果前面多打了几个空格,并不影响结果;或者有的账号登录会忽略开始和结束的空格,都会用到这个方法;

valueOf

例如:

 System.out.println(String.valueOf(1234)); // 1234 System.out.println(String.valueOf(3.14159)); // 3.14159 System.out.println(String.valueOf(true)); // true char[] s = new char[] {'a', 'b', 'c'}; System.out.println(String.valueOf(s)); // abc System.out.println(String.valueOf(new Object())); // java.lang.Object@776ec8df 

这里需要说一下,valueOf使用是非常广泛的;我们可以看到最后一个案例,输出一个对象:结果是它的地址以及位置信息等,是不是和 toString() 方法特别像?其实当传入vauleOf一个对象时,vauleOf对应的源码里就调用了toString()方法,所以才会输出一样的结果;所以说,如果我们重写了toString方法,就会调用我们重写的toString,输出对应信息;

还有,当我们用 输出的时候,如果传入的是对象,系统会默认调用toString,这是什么原因?调用println源码可以发现,每一个重载版本的println都会调用,所以如果println传入一个对象的话,就会调用valueOf方法,因为valueOf方法中有toString方法,所以就默认调用了toString方法,将对象转化为字符串输出;

在这里插入图片描述

可以看到boolean的println会调用 valueOf 的,其实其他基本数据类型也差不多,传入println后都会调用 valueOf ,所以可以得出结论:println输出的总是一个字符串;

StringBuffer/StringBuilder常用方法

一些总结:

  • StringBuffer/StringBuilder可以看做可变长度字符串。
  • StringBuffer/StringBuilder初始化容量16.
  • StringBuffer是线程安全的。StringBuilder是非线程安全的。
  • 频繁进行字符串拼接不建议使用“+”,对运行效率有影响;

下面就以StringBuffer为例,StringBuilder也是一样;

StringBuffer类构造方法

  • StringBuffer​()
  • StringBuffer​(int capacity指定初始化容量)
  • StringBuffer​(CharSequence seq)
  • StringBuffer​(String str)

StringBuffer常用方法:

append

结果:组合后形成的新的字符串

capacity

结果:当前字符串的容量(和长度length()不同)

delete

结果:删除后的字符串

insert

结果:插入后的字符串

replace

结果:替换后的新的字符串

总结

对于一些方法很简单,可能会觉得没有必要,但是既然有这个方法,那么肯定是有存在意义的;在实际开发中,这些方法不仅能提高你代码的可读性,还会减少你的代码量,所以都要有了解;

版权声明


相关文章:

  • 翁凯零基础java语言视频2024-11-15 08:42:01
  • java 基础设施层2024-11-15 08:42:01
  • java基础入门毕向东2024-11-15 08:42:01
  • Java零基础后端2024-11-15 08:42:01
  • 在线考试java基础2024-11-15 08:42:01
  • java基础语法体验实验报告2024-11-15 08:42:01
  • java哥德巴赫猜想基础做法2024-11-15 08:42:01
  • java基础类型知识2024-11-15 08:42:01
  • java和c哪个是基础2024-11-15 08:42:01
  • java集合框架基础编程练习题2024-11-15 08:42:01