Java入门-“第九大数据类型“-字符串

字符串String

**字符串(String)**是指多个字符连接起来组合成的字符序列,例如”中国”,“hello world”都为字符串。注意对比字符,字符只能存储一个字符使用单引号’中’,’国’。

img

字符串底层源码

img

字符串定义

创建String对象

String str = new String**(“hello”);**

img

引用字符串

String str = “hello”;

字符串常量池

字符串String实在开发中大量使用的类型,String的设计者为提高String的效率,设计了字符串常量池技术用来提高性能。当定义一个字符串后,会先放入字符串常量池,当访问字符串时,先会从常量池查找,如果常量池中有此字符串则,返回其引用,否则重新创建要给字符串放入常量池中。

img

字符串api

常用api

img

常用api案例

char charAt(int index)

程序案例:

String str = "hello String";
System.out.println("charAt(6): " + str.charAt(65));

程序运行结果:

charAt(5): S

boolean startsWith(String)

程序案例:

String str = "hello String";
System.out.println("startsWith: " + str.startsWith("hello"));

程序运行结果:

startsWith: true

boolean endsWith(String)

程序案例:

String str = "hello String";

System.out.println("endsWith: " + str.endsWith("hello"));

程序运行结果:

boolean startsWith: false

int indexOf(String)

程序案例:

String str = "hello String";

System.out.println("indexOf(\"String\"): " + str.indexOf("String"));

程序运行结果:

indexOf(“String”): 6

String substring(int ,int)

程序案例:

String str = "hello String";
System.out.println("str.substring(3,5):" + str.substring(3,5));

程序运行结果:

str.substring(3,5):lo

String replace(char oldChar, char newChar)

程序案例:

String str = "hello String";

System.out.println("str.replace('l', 'x'):" + str.replace('l', 'x'));

程序运行结果:

str.replace(‘l’, ‘x’):hexxo String

boolean contains(CharSequence)

程序案例:

String str = "hello String";

System.out.println("str.contains(\"Str\"):" + str.contains("Str"));

程序运行结果:

str.contains(“Str”):true

String toLowerCase()

程序案例:

String str = "hello String";

System.out.println("str.toLowerCase():" +str.toLowerCase());

程序运行结果:

str.toLowerCase():hello string

String toUpperCase()

程序案例:

String str = "hello String";

System.out.println("str.toUpperCase():" +str.toUpperCase());

程序运行结果:

str.toUpperCase():HELLO STRING

String trim()

程序案例:

String str = "  hello String  ";
System.out.println("str.trim():" +str.trim()); 

程序运行结果:

str.trim():hello String

正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

匹配字符

**[xyz]**匹配包含方括号中的某一个字符

程序案例:

String str = "f";

String regex = "[abcdefg]";

System.out.println(str.matches(regex));

程序运行结果:

true

不匹配字符

**[^xyz]**匹配不包含方括号中的任意一个字符

程序案例:

String str = "f";
String regex = "[abcdefg]";
System.out.println(str.matches(regex));

程序运行结果:

true

匹配某个字符

[a-z] 匹配a~z之间的任意一个字符。

[A-Z] 匹配A~Z之间的任意一个字符。

[0-9] 匹配0~9之间的任意一个字符。

程序案例:

String str = "f";

String regex = "[a-z]";

System.out.println(str.matches(regex));

程序运行结果:

true

不匹配某个字符

**[^a-z]**不包含a~z之间的任意一个字符。

程序案例:

String str = "f";
String regex = "[^a-z]";
System.out.println(str.matches(regex));

程序运行结果:

false

特殊符号

点(.)号:点号(.): 匹配除“\n”之外的任何单个字符。

程序案例:

String str = "apple";
String regex = ".+";
System.out.println(str.matches(regex));

程序运行结果:

true

如果要匹配点(.)符号 ,需要使用[.] 。

数字字符\d:匹配一个数字字符。等价于[0-9]。

程序案例:

String str = "1";
String regex = "\\d";
System.out.println(str.matches(regex));

程序运行结果:

true

非数字字符\D: 匹配一个非数字字符。等价于[ˆ0-9]。

程序案例:

String str = "a";
String regex = "\\D";
System.out.println(str.matches(regex));

程序运行结果:

true

单词字符\w: 匹配包括下划线的任何单词字符。等价于"[A-Za-z0-9_]"

程序案例:

String str = "a";
String regex = "\\w";
System.out.println(str.matches(regex));

程序运行结果:

true

非单词字符\W: 匹配任何非单词字符。等价于"[ˆA-Za-z0-9_]"

程序案例:

String str = "%";
String regex = "\\W";
System.out.println(str.matches(regex));

程序运行结果:

true

匹配数量

星(*)号: 匹配前面的子表达式零次或多次。

程序案例:

String str = "apple";
String regex = "[a-z]*";//匹配每一位都是字母出现了多次
System.out.println(str.matches(regex));

程序运行结果:

true

程序案例:

String str = "";
String regex = "[a-z]*";//匹配0次
System.out.println(str.matches(regex));

程序运行结果:

true

+号: 匹配前面的子表达式一次或多次

程序案例:

String str = "apple";
String regex = "[a-z]+";
System.out.println(str.matches(regex)); 

程序运行结果:

true

?号: 匹配前面的子表达式零次或一次

程序案例:

String str = "a";
String regex = "[a-z]?";
System.out.println(str.matches(regex));

程序运行结果:

true

{n}: n是一个非负整数。匹配确定的正好n次

程序案例:

String str = "apple";
String regex = "[a-z]{5}";
System.out.println(str.matches(regex));

程序运行结果:

true

{n,}: n是一个非负整数。匹配至少n次

程序案例:

String str = "apple";
String regex = "[a-z]{3,}";//至少匹配三次
System.out.println(str.matches(regex));

程序运行结果:

true

{m,n}: m,n是非负整数。匹配至少m次,至多n次

程序案例:

String str = "apple";
String regex = "[a-z]{3,7}";//匹配三次到七次
System.out.println(str.matches(regex));

程序运行结果:

true

逻辑

XY匹配:即先匹配X在匹配Y

程序案例:

String str = "a9";
String regex = "[a-z][0-9]";//第一个匹配字母,第二个匹配数字
System.out.println(str.matches(regex));

程序运行结果:

true

X|Y匹配: 匹配X或者匹配Y,(group)括号表示一组

程序案例:

String str = "org";
String regex = "(org)|(edu)";//分成两组org或者edu
System.out.println(str.matches(regex));

程序运行结果:

true

程序案例:

String str = "a";
String regex = "a|pple";//匹配a或者pple,无圆括号表示a或者,然后是pple字符串
System.out.println(str.matches(regex));

程序运行结果:

true

使用正则的字符串方法。

String[] split(String regex):根据正则表达式将字符串拆分为字符串数组。

程序案例:

 /*
  * 将字符串按照正则拆分为字符串数组
  */

String desc = "李白#$%唐^&&诗人*&静夜思";
String[] str = desc.split("[^\\u2E80-\\u9FFF]+");
System.out.println("姓名: " + str[0]);
System.out.println("朝代: " + str[1]);
System.out.println("职业: " + str[2]);
System.out.println("作品: " + str[3]);

程序运行结果:

姓名: 李白

朝代: 唐

职业: 诗人

作品: 静夜思

String replaceAll(String regex, String replacement):

根据正则表达式替换子字符串

程序案例:

/*
 * 提取字符串中的所有数字
 */

String str = "123world34#¥*sdsf2222";
String regex ="[^0-9]";//非数字
String s = str.replaceAll(regex, "");
System.out.println(s);

程序运行结果:

123342222

常见正则表达式

img

StringBuider/StringBuffer

为什么使用StringBuilder

在开发中会涉及到大量的字符串拼接操作。由于String底层是不可变的数组,每次操作都实际上重新创建了一下新的字符串,如果进行频繁字符串操作会占用更多的内存,而且拼接会创建新字符串效率也会大大降低。

项目中进行字符串拼接大都采用可变字符串即StringBuilder/StringBuffer对象提高新性能。

StringBuilder对象

底层实现
public final class  StringBuilder
  extends AbstractStringBuilder
  implements java.io.Serializable, CharSequence

  /**
   * The value is used for character storage.
   */

  char[] value;

  /**
   * The count is the number of characters used.
   */
int count;
StringBuilder 常用API
方法名称方法描述案例
append()在字符串末尾添加stringBuilder.append(“end”);
deleteCharAt(int)删除指定位置字符stringBuilder.deleteCharAt(1);
delete(int,int)删除指定范围的字符stringBuilder.delete(3,7);
indexOf(String)字符串的位置stringBuilder.indexOf(“app”);
reverse()将StringBuilder中内容反转stringBuilder.reverse();
toString()将StringBuilder内容返回为字符串stringBuilder.toString( );
StringBuilder、StringBuffer和String比较

img

  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jmu-java-01入门-格式化输入输出与字符串Java编程语言中的一个入门级别的课程,主要涉及到Java中的格式化输入输出和字符串处理。在Java中,格式化输入输出可以通过使用格式化字符串来控制输出的格式,例如指定输出的宽度、精度、对齐方式等。而字符串处理则包括字符串的拼接、截取、替换、比较等操作,这些操作都是Java编程中非常常见的操作。通过学习这门课程,可以帮助初学者更好地掌握Java编程语言的基础知识,为后续的学习打下坚实的基础。 ### 回答2: jmu-java-01入门课程中,格式化输入输出与字符串Java编程中非常重要的基础知识。格式化输入输出主要是通过使用Java中的格式化字符串来实现对变量进行控制输出的格式。而字符串则是Java中非常重要的一种数据类型,它可以用于存储文本信息。 在Java中,格式化输入输出主要是通过使用printf()和Scanner类来实现。其中,printf()方法用于输出格式化字符串,可以根据需要控制输出的格式,比如输出数字时控制小数点的位数、输出字符串时设定字符串宽度等。Scanner类则用于获取用户输入,并将输入的字符转换为相应的数据类型。在使用Scanner时,需要先创建对象,再通过调用相应的方法获取输入信息。 字符串Java中是一种类似于字符数组的数据类型,它可以存储由字符组成的文本信息。Java中的字符串是不可变的,一旦创建后就不能再被修改。常见的字符串操作包括字符串的连接、截取、替换等。Java中的字符串也支持正则表达式,可以用于处理一些复杂的字符串匹配操作。 使用格式化输入输出和字符串,可以方便地处理各种复杂的输入输出需求,并实现对字符串的灵活操作。掌握这两个基础知识对于Java编程的学习非常重要,是构建更复杂程序的基石。同时,也可以通过使用Java提供的类库函数,进一步扩展字符串及格式化输入输出的处理能力,提高程序的效率和质量。 ### 回答3: jmu-java-01入门-格式化输入输出与字符串,是Java编程语言入门课程,它涵盖了格式化输入输出和字符串的基本概念、用法和实例应用等内容,是学习Java编程语言的重要基础。 格式化输入输出是一种常见的技术,可以让我们以可读性更好的方式向用户展示数据,并且可以方便地输出复杂的数据结构。在Java中,将这种技术应用到实际编程中的方法是使用格式化字符串和格式化输出。 Java字符串也是一个重要的概念。字符串Java中是引用类型,它们被定义为对象,并且许多重要的Java类库方法使用字符串作为参数和返回类型。学习字符串如何在Java中使用和操作,不仅可以帮助我们更好地理解Java,还可以帮助我们编写更强大和复杂的程序。 在学习jmu-java-01入门-格式化输入输出与字符串时,我们将学习使用Java中的Scanner类来实现格式化输入。Scanner类提供了一种方便的方式,用于读取输入流中的各个部分。我们还将学习如何使用Java的Formatter类来格式化输出,从而以人类可读的方式格式化数据输出。 此外,我们还将学习如何创建和使用Java字符串字符串包含许多重要的概念,如长度、字符串拼接、子字符串和常用的字符串方法等等。通过学习字符串的方法和用法,我们将能够更好地理解Java语言中的字符串处理,从而更加熟练地编写程序。 总的来说,jmu-java-01入门-格式化输入输出与字符串,是学习Java编程语言时的一个重要基础课程。通过学习这个课程,我们将更好地理解和掌握Java中的格式化输入输出和字符串处理,从而编写出更高质量和复杂的Java程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值