Java字符串的基本操作


Java没有内置字符串类型,而是在标准Java类库中,提供了一个预定义类,很自然的叫做String。每个用双引号括起来的字符串都是String类的一个实例

字串

String类的substring方法可以从一个较大的字符串提取出一个字串。

注释:类似于C/C++,Java字符串中的代码单元和代码点从0开始计数

示例:

String.substring(0,3);//返回一个字符串,为原字符串从0到3,但不包括3的子串

该方法可以较为容易的计算字串长度:例如:3-1=2

程序示例

public class FirstCode1 {
   public static void main(String[] args) {
       String greeting = "HelloWorld";
       String greeter = greeting.substring(3,5);
       System.out.println("greeter = "+greeter);
  }
}

运行结果

greeter = lo

字符串拼接

Java语言允许使用+号连接(拼接)两个字符串。

当将一个字符串与一个非字符串进行拼接时,后者会转换成字符串(任何一个Java对象都可以转换成字符串

这种特性通常运用在输出语句中

示例:

System.out.println("Hello"+3+"World");

如果需要把多个字符串放在一起,用一个界定符分隔,可以使用静态join方法

示例:

String all = String.join("\\","S","Hello","World");

在Java11中还有一个repeat方法

示例:

String repeater = "java".repeat(2);//javajava

程序实例

public class FirstCode1 {
   public static void main(String[] args) {
       //+号字符串连接
       String greeting1 = "Hello";
       String greeting2 = "World";
       System.out.println("greeting3+greeting2 = "+ (greeting1+greeting2));

       //join方法
       String all = String.join("!","Hello","World","The","China","xiao");
       System.out.println("all = "+all);
  }
}

运行结果

greeting3+greeting2 = HelloWorld
all = Hello!World!The!China!xiao

不可变字符串

Java中字符串是不可变的

Java的设计者任务共享带来的高效率远远胜过于提取字串,拼接字符串所带来的低效率。

大多数情况下都不会修改字符串,而只是需要对字符串进行比较(有一种例外情况,将来自于文件或键盘的单个字符或较短的字符串组装成字符串)

Java中的字符串,类似于C/C++中的char指针。

检测字符串是否相等

equal方法

可以使用equals方法检测两个字符串是否相等

示例:

s.equals(t);

如果两字符串相等,返回true,如果两字符串不相等,返回false。

equalsIgnoreCase方法

该方法检测两个字符串是否相等(不区分大小写的情况下)

示例:

s.equalsIgnoreCase(t);

如果两字符串相等,返回true,如果两字符串不相等,返回false。

利用==检验字符串相等性的缺点

使用==只能检验出,存储在同一位置的字符串。如果两个字符串相同,但是没有存储在同一为止,那么使用==检测,他就是错误的。

千万不要使用==运算符测试字符串的相等性,以免在程序中出现最糟糕的bug,看起来这种bug就像是随机产生的间歇性错误。

程序实例

public class FirstCode1 {
   public static void main(String[] args) {
       //equals方法使用
       String greet1 = "Hello";
       String greet2 = "World";
       String greet3 = "Wor"+"ld";
       if (greet3.equals(greet2)){
           System.out.println("greet2 等于 greet3");
      }else {
           System.out.println("greet2 不等于 greet3");
      }
       //equalsIgnoreCase方法使用
       String greet4 = "HelloWorld";
       String greet5 = "helloworld";
       String greet6 = "helloWorld";
       if (greet4.equalsIgnoreCase(greet5)){
           System.out.println("greet4 等于 greet5");
      }else {
           System.out.println("greet4 不等于 greet5");
      }
       if (greet4.equalsIgnoreCase(greet6)){
           System.out.println("greet4 等于 greet6");
      }else {
           System.out.println("greet4 不等于 greet6");
      }
       if (greet5.equalsIgnoreCase(greet6)){
           System.out.println("greet5 等于 greet6");
      }else {
           System.out.println("greet5 不等于 greet6");
      }

       //使用“==”检测字符串是否相等
       String greeting1 = "helloworld";
       String greeting2 = "hello"+"wor"+"ld";
       if (greeting1 == greeting2){
           System.out.println("greeting1 等于 greeting2");
      }else {
           System.out.println("greeting1 不等于 greeting2");
      }
  }
}

运行结果

greet2 等于 greet3
greet4 等于 greet5
greet4 等于 greet6
greet5 等于 greet6
greeting1 等于 greeting2

空串与Null串

空串

空串“”是长度为0的字符串。可以调用以下代码检查一个字符串是否为空:

if(str.length() == 0)
   //或者
if(str.equals(""))

空串是一个Java对象,有自己的长度和内容。

null

String变量还可以放一个特殊的值,null,表示目前该变量没有与任何对象关联。

判断一个字符串是否为null

if(str == null)

判断一个字符串既不是空串也不是null

if(str != null && str.length() != 0)

注意:在null上调用方法会出现错误

程序示例

public class FirstCode1 {
   public static void main(String[] args) {
       //检验字符串是否为空
       String a1 = "";
       if(a1.length() == 0){
           System.out.println("a1是空串");
      }else {
           System.out.println("a1不是空串");
      }
       if(a1.equals("")){
           System.out.println("a1是空串");
      }else {
           System.out.println("a1不是空串");
      }
       //检验字符串是否为null
       String b1 = null;
       if (b1 == null){
           System.out.println("b1 = null");
      }else {
           System.out.println("b1 != null");
      }
       //检验字符串不为空且不为null
       String c1 = "Hello";
       if (c1 != null && c1.length() != 0){
           System.out.println("字符串c1既不是空串,也不是null");
      }else {
           System.out.println("字符串c1可能是空串,也可能是null");
      }
  }
}

运行结果

a1是空串
a1是空串
b1 = null
字符串c1既不是空串,也不是null

阅读联机API文档

可以从Oracle上下载API文档,并保存在本地。

也可以在浏览器上访问:http://docs.oracle.com/javase/9/docs/api

构建字符串

有时候需要有较短的字符串拼接成较长的字符串,当数据较多的时候,使用+的效率就有点低了,每次拼接字符串都既浪费空间,又浪费时间。


如果需要用许多小段字符串来构建一个字符串,那么应该按照下列步骤进行

  1. 构建一个空的字符串构建器:

    StringBuilder builder = new StringBuilder();
  2. 每次需要添加一部分内容时,就调用append方法

    builder.append(ch);
  3. 在字符串构建完成时,调用toString方法,接可以得到一个String字符串,其中包含了构建其中的

    String buder = builder.toString();

注释

StringBuilder类在Java5中引入,这个类的前身是StringBuffer,它的效率稍微有些低,但是允许采用多线程的方式添加或删除字符串。如果所有字符串编辑操作都在单个线程中执行(通常是这样),则应该使用StringBuilder

程序示例

public class FirstCode1 {
   public static void main(String[] args) {
       StringBuilder builder = new StringBuilder();

       builder.append("He");
       builder.append("llo");
       builder.append(",Wor");
       builder.append("ld!");

       String b1 = builder.toString();
       System.out.println(b1);
  }
}

运行结果

Hello,World!




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM