string.h java_Java String

String

在Java中,String是一个引用类型,它本身也是一个class。但是,Java编译器对String有特殊处理,即可以直接用"..."来表示一个字符串:

String s1 = "Hello!";

实际上字符串在String内部是通过一个char[]数组表示的,因此,按下面的写法也是可以的:

String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});

因为String太常用了,所以Java提供了"..."这种字符串字面量表示方法。

Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。

创建字符串

创建字符串最简单的方式如下:

String greeting = "菜鸟教程";

在代码中遇到字符串常量时,这里的值是 "菜鸟教程"",编译器会使用该值创建一个 String 对象。

和其它对象一样,可以使用关键字和构造方法来创建 String 对象。

String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:

public class StringDemo{

public static void main(String args[]){

char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'};

String helloString = new String(helloArray);

System.out.println( helloString );

}

}

以上实例编译运行结果如下:

runoob

注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了(详看笔记部分解析)。

字符串长度

用于获取有关对象的信息的方法称为访问器方法。

String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。

下面的代码执行后,len 变量等于 14:

public class StringDemo {

public static void main(String args[]) {

String site = "www.runoob.com";

int len = site.length();

System.out.println( "菜鸟教程网址长度 : " + len );

}

}

以上实例编译运行结果如下:

菜鸟教程网址长度 : 14

连接字符串

String 类提供了连接两个字符串的方法:

string1.concat(string2);

返回 string2 连接 string1 的新字符串。也可以对字符串常量使用 concat() 方法,如:

"我的名字是 ".concat("Runoob");

更常用的是使用'+'操作符来连接字符串,如:

"Hello," + " runoob" + "!"

结果如下:

"Hello, runoob!"

public class StringDemo {

public static void main(String args[]) {

String string1 = "菜鸟教程网址:";

System.out.println("1、" + string1 + "www.runoob.com");

}

}

以上实例编译运行结果如下:

1、菜鸟教程网址:www.runoob.com

创建格式化字符串

我们知道输出格式化数字可以使用 printf() 和 format() 方法。

String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。

String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。

System.out.printf("浮点型变量的值为 " +

"%f, 整型变量的值为 " +

" %d, 字符串变量的值为 " +

"is %s", floatVar, intVar, stringVar);

String fs;

fs = String.format("浮点型变量的值为 " +

"%f, 整型变量的值为 " +

" %d, 字符串变量的值为 " +

" %s", floatVar, intVar, stringVar);

字符串比较

当我们想要比较两个字符串是否相同时,要特别注意,我们实际上是想比较字符串的内容是否相同。必须使用equals()方法而不能用==。

我们看下面的例子:

public class Main {

public static void main(String[] args) {

String s1 = "hello";

String s2 = "hello";

System.out.println(s1 == s2);

System.out.println(s1.equals(s2));

}

}

从表面上看,两个字符串用==和equals()比较都为true,但实际上那只是Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常量池,自然s1和s2的引用就是相同的。

所以,这种比较返回true纯属巧合。换一种写法,比较就会失败:

public class Main {

public static void main(String[] args) {

String s1 = "hello";

String s2 = "HELLO".toLowerCase();

System.out.println(s1 == s2);

System.out.println(s1.equals(s2));

}

}

结论:两个字符串比较,必须总是使用equals()方法。

要忽略大小写比较,使用equalsIgnoreCase()方法。

String类还提供了多种方法来搜索子串、提取子串。常用的方法有:

// 是否包含子串:

"Hello".contains("ll"); // true

注意到contains()方法的参数是CharSequence而不是String,因为CharSequence是String的父类。

搜索子串的更多的例子:

"Hello".indexOf("l"); // 2

"Hello".lastIndexOf("l"); // 3

"Hello".startsWith("He"); // true

"Hello".endsWith("lo"); // true

提取子串的例子:

"Hello".substring(2); // "llo"

"Hello".substring(2, 4); "ll"

注意索引号是从0开始的。

去除首尾空白字符

使用trim()方法可以移除字符串首尾空白字符。空白字符包括空格,\t,\r,\n:

" \tHello\r\n ".trim(); // "Hello"

注意:trim()并没有改变字符串的内容,而是返回了一个新字符串。

另一个strip()方法也可以移除字符串首尾空白字符。它和trim()不同的是,类似中文的空格字符\u3000也会被移除:

"\u3000Hello\u3000".strip(); // "Hello"

" Hello ".stripLeading(); // "Hello "

" Hello ".stripTrailing(); // " Hello"

String还提供了isEmpty()和isBlank()来判断字符串是否为空和空白字符串:

"".isEmpty(); // true,因为字符串长度为0

" ".isEmpty(); // false,因为字符串长度不为0

" \n".isBlank(); // true,因为只包含空白字符

" Hello ".isBlank(); // false,因为包含非空白字符

替换子串

要在字符串中替换子串,有两种方法。一种是根据字符或字符串替换:

String s = "hello";

s.replace('l', 'w'); // "hewwo",所有字符'l'被替换为'w'

s.replace("ll", "~~"); // "he~~o",所有子串"ll"被替换为"~~"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值