java新建字符串变量_Java基础04—字符串(示例代码)

字符串

参考资料:《Java从入门到精通》/明日科技编著. 4版. 北京:清华大学出版社,2016

在Java语言中,字符串作为String类的实例来处理。以对象的方式来处理字符串,使字符串更加灵活、方便。

一、String类

前面介绍了,char类型变量只能表示单个字符,不能表示由多个字符连接而成的字符串。在java语言中将字符串作为对象处理,可以通过java.lang包中的String类来创建字符串对象。

1、声明字符串

在Java语言中,字符串必须包含在一对双引号("")中。声明一个字符串的方式如下:

String str; //声明字符串

String str1 = "hello"; //声明字符串,并赋初值

注意:声明字符串变量必须经过初始化才能使用,否则编译器会报出“变量未经过初始化”。

2、创建字符串

Java语言中将字符串作为对象来处理,因此可以像创建对象一样来创建字符串对象。

(1)String(char a[])

用一个字符数组a创建String对象

char a[] = {‘a‘,‘b‘,‘c‘,‘d‘}; 等价于

String s = new String(a); -----------> String s = new String("abcd");

(2)String(char a[], int offset, int length)

提取字符数组a中的一部分创建一个字符串对象。

参数offset表示:开始截取字符串的位置。

参数length表示:截取字符串的长度。

char a[] = {‘s‘,‘t‘,‘u‘,‘d‘,‘e‘,‘n‘,‘t‘}; 等价于

String s = new String(a,2,4); ---------> String s = new String("uden");

除了上面的两种方式,还可以通过引用字符串常量来创建字符串变量。

String str1, str2;

str1 = "hello world";

str2 = "hello world";

此时,str1和str2引用相同的字符串变量,因此具有相同的实体。

public class StringTest {

public static void main(String[] args) {

String s = new String("hello");

String s1 = "hello";

String s2 = "hello";

String s3 = new String("hello");

System.out.println("s=s1? " + (s == s1));

System.out.println("s1=s2? " + (s1 == s2));

System.out.println("s=s3? " + (s == s3));

}

}

输出结果:

s=s1? false

s1=s2? true

s=s3? false

3、连接字符串

可以对多个字符串进行连接,也可以使字符串与其他数据类型进行连接。

使用“+”运算符可以实现多个字符串的连接。

public class StringJoin {

public static void main(String[] args) {

String s1 = new String("hello");

String s2 = new String("world");

String s3 = s1 + " " + s2;

System.out.println(s3); //输出hello world

}

}

字符串同其他基本数据类型进行连接时,会自动调用toString()方法,将这些数据直接转换成字符串。

public class ToString {

public static void main(String[] args) {

int num = 10;

float f1 = 2.34f;

String s1 = num + " " + f1;

System.out.println(s1);

}

}

三、获取字符串信息

(1)获取字符串长度

使用String类的length()方法可以获取声明的字符串对象的长度。

String str = "hello world";

System.out.println( str.length() ); //输出11

注意:字符串的长度包括字符串中的空格。

(2)字符串查找

String类提供了两种查找字符串的方法,即indexOf()和lastIndexOf()方法。

indexOf()方法返回的是搜索的字符或字符串首次出现的位置。

lastIndexOf()方法返回的是搜索的字符或字符串最后一次出现的位置。

String str = "hello world";

System.out.println( str.indexOf("o") ); //输出4

System.out.println( str.lastIndexOf("l") ); //输出9

注意:计算机中String对象是数组表示的,字符串的下标从0开始。

说明:如果lastIndexOf()方法中的参数为空字符串""(注意没有空格),则返回字符串的长度。

(3)获取指定索引位置的字符

使用charAt()方法可以将指定索引位置的字符返回。

String str = "hello world";

char c = str.charAt(6);

System.out.println( c ); //输出w

四、字符串操作

(1)获取子字符串

通过String类的substring()方法可以对字符串进行截取。这些方法的共同点就是利用字符串的下标进行截取。

substring(int beginIndex)

返回从指定的索引位置开始截取至该字符串的结尾。

String str = "hello world";

String substr = str.substring(3);

System.out.println(substr); //输出lo world

substring(int beginIndex, int endIndex)

返回从指定的索引位置开始截取至指定的索引位置结束的字符串。

String str = "hello world";

String substr = str.substring(3,9);

System.out.println(substr); //输出lo wor

(2)去空格

trim()方法返回字符串的副本,忽略前导空格和尾部空格。

String str = " hello world ";

String substr = str.trim();

System.out.println(substr);

输出结果:

hello world

注意:中间的空格保留

(3)字符串替换

replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。格式如下:

replace(char oldChar, char newChar)

replace()方法返回一个新的字符串。

如果要替换的字符oldChar在原字符串中反复出现,replace()方法会将所有oldChar全部替换成newChar。

oldChar必须和原字符串中的字符大小写一致。

String str = "hello world";

String substr = str.replace(‘l‘,‘L‘);

System.out.println(substr);

输出结果:

heLLo worLd

(4)判断字符串的开头与结尾

startsWith()

该方法用于判断字符串对象的前缀是否为参数指定的字符串,返回值为boolean类型。

String str = "hello world";

boolean bool1 = str.startsWith("he");

boolean bool2 = str.startsWith("hE");

System.out.println(bool1); //输出true

System.out.println(bool2); //输出false

endsWith()

该方法用于判断当前字符串是否为以指定的子字符串结束,返回值为boolean型。

String str = "hello world";

boolean bool1 = str.endsWith("ld");

boolean bool2 = str.endsWith("Ld");

System.out.println(bool1); //输出true

System.out.println(bool2); //输出false

(5)判断字符串是否相等

对字符串对象的比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的内存地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。

String str1 = "i love java";

String str2 = "i love java";

System.out.println(str1 == str2) //输出true

String str3 = new String("i love java");

String str4 = new String("i love java");

System.out.println(str3 == str4); //输出false

因此,要比较两个字符串的内容是否相等,应该使用equals()和equalsIgnoreCase()方法。

equals()方法

该方法比较两个字符串是否具有相同的字符和长度,结果返回boolean类型。注意:进行字符比较是区分大小写。

equalsIgnoreCase()方法

该方法和equals()类似,但是不区分大小写。

String str1 = "i love java";

String str2 = "i love java";

String str3 = "I LOVE JAVA";

boolean res1 = str1.equals(str2);

boolean res2 = str1.equals(str3);

boolean res3 = str1.equalsIgnoreCase(str3);

System.out.println(res1); //返回true

System.out.println(res2); //返回false

System.out.println(res3); //返回true

(6)按字典顺序比较两个字符串

compareTo()方法是按照字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值。

如果按照字典顺序,String对象位于参数字符串之前,则比较结果是一个负整数。

如果按照字典顺序,String对象位于参数字符串之后,则比较结果是一个正整数。

如果这两个字符串相等,则结果为0。

String str4 = new String("bb");

String str5 = new String("ac")

int res = str4.compareTo(str5)

System.out.println(res); //输出1

注意:

先比较第一位字符,若在之前,则返回-1;若在之后,则返回1;

若第一位字符相同,则比较第二位字符,以此类推。

如果所有字符相同,则返回0。

(7)字母大小写转换

toLowerCase()方法

将字符串中的所有字母转换为小写字母。

toUpperCase()方法

将字符串中的所有字母转换为大写字母。

String str6 = "I Love Java"

String str7 = str6.toLowerCase();

String str8 = str6.toUpperCase()

System.out.println(str7);

System.out.println(str8);

输出结果:

i love java

I LOVE JAVA

(8)字符串分割

split()方法可以使字符串按照指定的分割符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中。split()方法提供了两种字符串分割形式。

split ( String sign )

其中,sign为字符串的分割符,也可以是正则表达式。如果想定义多个分割符,可以使用“|”符号。例如,“,|?”表示使用“,”和“?”进行分割。

String str6 = "Do you Love Java?Yes";

String[] a = str6.split(" |\?")

//定义空格和问号作为分割符,问号要作转义

for(int i=0; i

System.out.println(a[i]);

}

输出结果:

Do

you

Love

Java

Yes

五、格式化字符串

String类的静态format()方法用于创建格式化的字符串。format()有两种重载的方式:

format ( String format, Object...args )

format ( Local 1, String format, Object...args )

1、日期格式化

import java.util.Date;

public class Format {

public static void main(String[] args) {

Date date = new Date();

String day = String.format("%te",date);

String year = String.format("%tY",date);

String mouth = String.format("%tm",date);

System.out.println(year + "-" + mouth + "-" + day);

} //输出2020-05-4

}

其中,"%te、%tY、%tm是转换符。

2、时间格式化

import java.util.Date;

public class Format {

public static void main(String[] args) {

Date date = new Date();

String day = String.format("%te",date);

String year = String.format("%tY",date);

String mouth = String.format("%tm",date);

String hour = String.format("%tH",date);

String minute = String.format("%tM",date);

String second = String.format("%tS",date);

System.out.println("当前时间:" + year + "-" + mouth + "-" + day + " " + hour + ":" + minute + ":" + second);

} //输出:当前时间:2020-05-4 20:19:09

}

3、常见的日期时间格式化组合

import java.util.Date;

public class Format {

public static void main(String[] args) {

Date date = new Date();

String time = String.format("%tT",date);

String year = String.format("%tF",date);

System.out.println("当前时间:" + year + " " + time);

} //输出:当前时间:2020-05-04 20:23:09

}

六、正则表达式

正则表达式通常被用于判断语句中,用来检测某一字符串是否满足某一格式。

七、字符串生成器

创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复对字符串进行修改,将极大地增加系统开销。使用可变地字符序列类StringBuilder类,可以大大提高频繁增加字符串地效率。

public class Jerque {

public static void main(String[] args) {

String str = "";

//记录开始时间

long startTime = System.currentTimeMillis();

for(int i=0; i<10000; i++){

str = str + i;

}

//记录结束时间

long endTime = System.currentTimeMillis();

long time = endTime - startTime;

System.out.println("String消耗时间:" + time);

StringBuilder builder = new StringBuilder("");

//记录开始时间

startTime = System.currentTimeMillis();

for(int i=0; i<10000; i++){

builder.append(i);

}

//记录结束时间

endTime = System.currentTimeMillis();

time = endTime - startTime;

System.out.println("StringBuilder消耗时间:" + time);

}

}

输出结果:

String消耗时间:300

StringBuilder消耗时间:0

StringBuilder类的常用方法如下:

append ( )

该方法用于向字符串生成器中追加内容,可以实现接受任何类型的数据。

insert ( )

该方法用于向字符串生成器的指定位置插入数据内容,可以接受int、float、char和boolean等数据类型或其他对象。

public class ToString {

public static void main(String[] args) {

StringBuilder builder = new StringBuilder("hello");

builder.insert(5," world");

System.out.println( builder.toString() );

//输出:hello world

}

}

delete ( int start, int end )

该方法删除字符串中指定的字符,从指定的start位置开始,直到end-1的位置。如果start等于end,则不发生任何改变。

public class ToString {

public static void main(String[] args) {

StringBuilder builder = new StringBuilder("hello world");

builder.delete(2,5);

System.out.println( builder.toString() );

//输出:he world

}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值