Java 面向对象编程进阶七(字符串 String )

目录

字符串 String

String 基础

String 类和常量池

String 类常用的方法

String 类常用方法一

String 类常用方法二

字符串相等的判断


字符串 String

        String 是我们开发中最常用的类,我们不仅要掌握 String 类常见的方法,对于 String 的 底层实现也需要掌握好,不然在工作开发中很容易犯错。

String 基础

  • String 类又称作不可变字符序列。
  • String 位于 java.lang 包中,Java 程序默认导入 java.lang 包下的所有类。
  • Java 字符串就是 Unicode 字符序列,例如字符串“Java”就是 4 个 Unicode 字 符’J’、’a’、’v’、’a’组成的。
  • Java没有内置的字符串类型,而是在标准Java类库中ᨀ供了一个预定义的类String, 每个用双引号括起来的字符串都是 String 类的一个实例。

String 类的简单使用

String e = "" ; // 空字符串
String greeting = " Hello World ";

Java 允许使用符号"+"把两个字符串连接起来。

字符串连接

String s1 = "Hello";
String s2 = "World! ";
String s = s1 + s2; //HelloWorld!

符号"+"把两个字符串按给定的顺序连接在一起,并且是完全按照给定的形式

当"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将 另一个操作数转换为字符串然后再进行连接。

"+"连接符

int age = 18;
String str = "age is" + age; //str 赋值为"age is 18"
//这种特性通常被用在输出语句中:
System.out.println("age is" + age);

String 类和常量池

        在 Java 的内存分析中,我们会经常听到关于“常量池”的᧿述,实际上常量池也分了 以下三种:

1. 全局字符串常量池(String Pool)
        全局字符串常量池中存放的内容是在类加载完成后存到 String Pool 中的,在每个 VM 中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。

2. class 文件常量池(Class Constant Pool)
        class 常量池是在编译的时候每个 class 都有的,在编译阶段,存放的是常量(文本字符 串、final 常量等)和符号引用。

3. 运行时常量池(Runtime Constant Pool)
        运行时常量池是在类加载完成之后,将每个 class 常量池中的符号引用值转存到运行时 常量池中,也就是说,每个 class 都有一个运行时常量池,类在解析之后,将符号引用替换 成直接引用,与全局常量池中的引用值保持一致。

常量池

String str1 = "abc";
String str2 = new String("def");
String str3 = "abc";
String str4 = str2.intern();
String str5 = "def";
System.out.println(str1 == str3);// true
System.out.println(str2 == str4);// false
System.out.println(str4 == str5);// true

        首先经过编译之后,在该类的 class 常量池中存放一些符号引用,然后类加 载之后,将 class 常量池中存放的符号引用转存到运行时常量池中,然后经过验证,准备阶 段之后,在堆中生成驻留字符串的实例对象(也就是上例中 str1 所指向的“abc”实例对象), 然后将这个对象的引用存到全局 String Pool 中,也就是 String Pool 中,最后在解析阶段, 要把运行时常量池中的符号引用替换成直接引用,那么就直接查询 String Pool,保证 String Pool 里的引用值与运行时常量池中的引用值一致,大概整个过程就是这样了。

String 类常用的方法

String 类的常用方法列表
方法解释说明
char charAt(int index)返回字符串中第 index 个字符
boolean equals(String other)如果字符串与 other 相等,返回 true;否则,返回 false
boolean equalsIgnoreCase(String other)如果字符串与 other 相等(忽略大小写),则返回 true;否则, 返回 false。
int indexOf(String str)返回从头开始查找第一个子字符串 str 在字符串中的索引位 置。如果未找到子字符串 str,则返回-1。
lastIndexOf()返回从末尾开始查找第一个子字符串 str 在字符串中的索引位 置。如果未找到子字符串 str,则返回-1。
int length()返回字符串的长度。
String replace(char oldChar,char newChar)返回一个新串,它是通过用 newChar 替换此字符串中出现的 所有 oldChar 而生成的。
boolean startsWith(String prefix)如果字符串以 prefix 开始,则返回 true。
boolean endsWith(String prefix)如果字符串以 prefix 结尾,则返回 true。
String substring(int beginIndex)返回一个新字符串,该串包含从原始字符串beginIndex到串尾。
String substring(int beginIndex,int endIndex)返回一个新字符串,该串包含从原始字符串 beginIndex 到串尾 或 endIndex-1 的所有字符。
String toLowerCase()返回一个新字符串,该串将原始字符串中的所有大写字母改成 小写字母。 
String toUpperCase()返回一个新字符串,该串将原始字符串中的所有小写字母改成 大写字母。
String trim()返回一个新字符串,该串删除了原始字符串头部和尾部的空 格。
String 类常用方法一
public class StringTest1 {
    public static void main(String[ ] args) {
        String s1 = "core Java";
        String s2 = "Core Java";
        System.out.println(s1.charAt(3));//ᨀ取下标为 3 的字符
        System.out.println(s2.length());//字符串的长度
        System.out.println(s1.equals(s2));//比较两个字符串是否相等
        System.out.println(s1.equalsIgnoreCase(s2));//比较两个字符串(忽略大小写)
        System.out.println(s1.indexOf("Java"));//字符串 s1 中是否包含 Java
        System.out.println(s1.indexOf("apple"));//字符串 s1 中是否包含 apple
        String s = s1.replace(' ', '&');//将 s1 中的空格替换成&
        System.out.println("result is :" + s);
    }
}

String 类常用方法二
public class StringTest1 {
    public static void main(String[ ] args) {
        String s = "";
        String s1 = "How are you?";
        System.out.println(s1.startsWith("How"));//是否以 How 开头
        System.out.println(s1.endsWith("you"));//是否以 you 结尾
        s = s1.substring(4);//ᨀ取子字符串:从下标为 4 的开始到字符串结尾为止
        System.out.println(s);
        s = s1.substring(4, 7);//ᨀ取子字符串:下标[4, 7) 不包括 7
        System.out.println(s);
        s = s1.toLowerCase();//转小写
        System.out.println(s);
        s = s1.toUpperCase();//转大写
        System.out.println(s);
        String s2 = " How old are you!! ";
        s = s2.trim();//去除字符串首尾的空格。注意:中间的空格不能去除
        System.out.println(s);
        System.out.println(s2);//因为 String 是不可变字符串,所以 s2 不变
    }
}

字符串相等的判断
  • equals 方法用来检测两个字符串内容是否相等。如果字符串 s 和 t 内容相等,则 s.equals(t)返回 true,否则返回 false。
  • 要测试两个字符串除了大小写区别外是否是相等的,需要使用 equalsIgnoreCase 方 法。
  • 判断字符串是否相等不要使用"=="。

忽略大小写的字符串比较

"Hello".equalsIgnoreCase("hellO");//true

字符串的比较:"= ="与 equals()方法

public class StringTest1 {
    public static void main(String[ ] args) {
        String g1 = "学习Java!";
        String g2 = "学习Java!";
        String g3 = new String("学习Java!");
        System.out.println(g1 == g2); // true 指向同样的字符串常量对象
        System.out.println(g1 == g3); // false g3 是新创建的对象
        System.out.println(g1.equals(g3)); // true g1 和 g3 里面的字符串内容是一样的
    }
}

内存分析如下: 

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的字符串处理可以使用StringStringBuffer两个来实现。String是不可变的字符序列,而StringBuffer是可变的字符序列。 以下是一个综合应用的例子,实现字符串的处理: ```java import java.util.Scanner; public class StringHandling { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入一个字符串:"); String str = input.nextLine(); // 判断字符串是否为空 if(str.isEmpty()) { System.out.println("您输入的字符串为空!"); } else { // 获取字符串长度 int len = str.length(); System.out.println("您输入的字符串长度为:" + len); // 将字符串反转 StringBuffer sb = new StringBuffer(str); sb.reverse(); System.out.println("反转后的字符串为:" + sb.toString()); // 统计字符串中某个字符出现的次数 System.out.print("请输入要统计的字符:"); char ch = input.next().charAt(0); int count = 0; for(int i = 0; i < len; i++) { if(str.charAt(i) == ch) { count++; } } System.out.println("字符'" + ch + "'在字符串中出现的次数为:" + count); // 将字符串转换为大写字母 String upperCaseStr = str.toUpperCase(); System.out.println("转换为大写字母后的字符串为:" + upperCaseStr); // 将字符串中的空格替换为'-' String replaceStr = str.replace(' ', '-'); System.out.println("替换后的字符串为:" + replaceStr); } } } ``` 以上代码实现了以下功能: 1. 输入一个字符串,判断是否为空,并输出字符串长度; 2. 将字符串反转,并输出反转后的字符串; 3. 统计字符串中某个字符出现的次数,并输出; 4. 将字符串转换为大写字母,并输出; 5. 将字符串中的空格替换为'-',并输出替换后的字符串

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值