从零学Java - String类

这篇具有很好参考价值的文章主要介绍了从零学Java - String类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java String类

1 String

Java程序中的所有字符串文本(例如“abc”)都是此类的实例。
字符串字面值是常量,具有不可变性,创建之后不可改变。

1.1 常用两种创建方式

//1 直接使用字符串字面值(双引号包裹)赋值
//数据存储在常量池中
String s1 = "hello";
//2 使用构造方法赋值
//数据存储在堆中
String s2 = new String("hello");

1.2 比较两种创建方式

//常量池中数据不会重复。
String s3 = "hello";
System.out.println(s1 == s2); //比较地址
System.out.printlin(s1.equals(s2)); //比较内容
System.out.println(s1 == s3); //比较地址
res:
false
true
true

字符串字面值保存在常量池中,JDK1.7之前常量池存在方法区中,JDK1.7(包括1.7)之后移入堆中;常量池中数据不会重复。

1.3 字符串不可变性

//在常量池种重新开辟空间
//字符串具有不可变性:重新赋值时,不会改变原来的数据,而是重新开辟空间
s3 = "zhangsan"
System.out.println(s3);
System.out.println(s1);
res:
zhangsan
hello

内存存储方式:

从零学Java - String类,从零学Java,java,python,开发语言

1.4 面试题

eg:

String name = new String(“lisi”)   // 该语句在内存中创建了几个对象

res:

两个, 常量池一个, 堆中一个

2 常用方法

eg:

String s1 = "Java是世界上最好的语言,Java第一,Java真牛";
  • public char charAt(int index):根据下标获取字符。

    //1 charAt(); 返回指定位置上的字符
    char first = s1.charAt(0);
    char last = s1.charAt(s1.length() - 1);
    System.out.println(first);
    System.out.println(last);
    
  • public boolean contains(String str):判断当前字符串中是否包含str。

    //2 contains(String str):判断当前字符串中是否包含str。
    boolean b = s1.contains("java");
    System.out.println(b);
    
  • public char[] toCharArray():将字符串转换成字符数组。

    //3 toCharArray(); 返回字符串的字符数组
    char[] charArray = s1.toCharArray();
    System.out.println(charArray.length);
    
  • public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。

    //4 indexOf(); 查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
    int i = s1.indexOf("Java");
    int i1 = s1.indexOf("Java",4);
    System.out.println(i);
    System.out.println(i1);
    
    //需求:输出字符串中出现Java的位置
    int p = 0;
    while ((p=s1.indexOf("Java",p))!=-1) {
        System.out.println("位置:"+p);
        p+=4;
    }
    
  • public int length():返回字符串的长度。

    //5 length(); 返回字符串的长度
    System.out.println(s1.length());
    
  • public String trim():去掉字符串前后的空格。

    //6 trim():去掉字符串前后的空格。
    String s1 = "    Java是世界上最好的语言,        Java第一,     Java真牛          ";
    System.out.println(s1.trim());
    
  • public String toUpperCase():将小写转成大写。

    //7 toUpperCase():将小写转成大写。toLowerCase():将大写转成小写。
    String s2 = "Hello";
    System.out.println(s2.toUpperCase());
    System.out.println(s2.toLowerCase());
    
  • public boolean endsWith(String str):判断字符串是否以str结尾。

    /* 8 endsWith(String str):判断字符串是否以str结尾
         startsWith(String str):判断字符串是否以str开头
    */
    String s3 = "hello.java";
    System.out.println(s3.endsWith("java"));
    System.out.println(s3.startsWith("hello"));
    
  • public String replace(char oldChar,char newChar):将旧字符串替换成新字符串

    //9 replace(char oldChar,char newChar):将旧字符串替换成新字符串
    System.out.println(s1.replace("Java", "java"));
    
  • public String[] split(String str):根据str做拆分。

     //10 split(String str):根据str做拆分
     //以逗号或空格拆分,  + 表示前面的逗号或空格可以出行1次或多次
     String[] strings = s1.split("[, ]+");
     System.out.println(strings.length);
     for (String s : strings) {
         System.out.println(s);
     }
    
  • public String substring(int beginIndex,int endIndex):在字符串中截取出一个子字符串

    //11 substring(int beginIndex,int endIndex):在字符串中截取出一个子字符串
    String s4 = "Java是世界上最好的语言,Java第一,Java真牛";
    String substring = s4.substring(0, 4);
    String substring1 = s4.substring(s4.length() - 6);
    System.out.println(substring);
    System.out.println(substring1);
    
  • public int compareTo(String anotherString) :比较两个字符串的大小(字符表位置,或长度)

    //12 compareTo() 比较两个字符串的大小(字符表位置,或长度)
    String s5 = "abc"; //97
    String s6 = "xyz"; //120
    System.out.println(s5.compareTo(s6));
    //如果一个字符串是另一个字符串的前缀, 比较长度
    String s7 = "abcxyz";
    System.out.println(s5.compareTo(s7));
    
  • public boolean equals(Object anObject): 比较字符串是否相同

    System.out.println(s5.equals(s6));
    
  • public native String intern() :

    判断常量池是否包含此数据 
    如果有, 直接返回常量池中的地址
    如果没有, 复制一份地址放入常量池, 然后返回这个地址
    

2.1 练习

eg:

需求:已知String str = "this is a text";
将str中的单词单独获取出来
将str中的text替换为practice
在text前面插入一个easy
将每个单词的首字母改为大写

res:

/**
 * @author 胡昊龙
 * @version 1.0
 * @description: TODO 需求:已知String str = "this is a text";
 *                    将str中的单词单独获取出来
 *                    将str中的text替换为practice
 *                    在text前面插入一个easy
 *                    将每个单词的首字母改为大写
 * @date 2024/1/8 11:24
 */
public class TestString04 {
    public static void main(String[] args) {
        String str = "this is a text";

        //将str中的单词单独获取出来
        String[] split = str.split(" ");
        for (String s : split) {
            System.out.println(s);
        }

        //将str中的text替换为practice
        String replace = str.replace("text", "practice");
        System.out.println(replace);

        //在text前面插入一个easy
        String replace1 = str.replace("text", "easy text");
        System.out.println(replace1);

        //将每个单词的首字母改为大写
        for (String s : split) {
/*
		 方法一:
            String first = s.substring(0, 1);
            first = first.toUpperCase();
*/
            //方法二
            char first = s.charAt(0);
            first = Character.toUpperCase(first);
            //拼接
            s=first+s.substring(1);
            System.out.println(s);
        }
    }
}

3 可变字符串

概念:可在内存中创建可变的缓冲空间,存储频繁改变的字符串。

优点:执行效率高于String。

StringBuilder:JDK5.0提供,运行效率快、线程不安全。(单)

StringBuffer:JDK1.0提供,运行效率慢、线程安全。(多)

3.1 常用方法

创建可变字符串对象

StringBuilder builder = new StringBuilder();
  • append(String str)

  • //1 append(); 追加内容
    builder.append("java第一");
    builder.append("java真牛");
    System.out.println(builder);
    
  • insert(String str)

  • //2 insert(); 插入内容
    builder.insert(0,"java是世界上最好的语言");
    System.out.println(builder);
    
  • replace()

  • //3 replace(); 替换内容
    builder.replace(0,4,"JAVA");
    System.out.println(builder);
    
  • reverse()

  • //4 reverse(); 反转内容
    builder.reverse();
    System.out.println(builder);
    
  • delete()

  • //5 delete(); 删除内容
    builder.delete(0,4);
    builder.delete(0, builder.length());// 清空内容
    

3.2 验证StringBuilder的高效性

eg:

用两种方式运行同一种操作, 比较所消耗时间
/**
 * @author 胡昊龙
 * @version 1.0
 * @description: TODO
 * @date 2024/1/8 14:46
 */
public class StringB2 {
    public static void main(String[] args) {
        //验证StringBuilder的效率
        String s = "";
        long start = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {
            s+=i;
        }
        long end = System.currentTimeMillis();
        System.out.println("用时: "+(end-start));

        System.out.println("=======================================");

        StringBuilder builder = new StringBuilder();
        long start1 = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {
            builder.append(i);
        }
        long end1 = System.currentTimeMillis();
        System.out.println("用时: "+(end1-start1));
    }
}

res:

用时: 6438
==============
用时: 2

3.3 练习

把“18987425.99”转成“18,987,425.99”

public class StringB3 {
    public static void main(String[] args) {
        String s = "18987425.99";
        StringBuilder num = new StringBuilder(s);
        int pos = num.indexOf(".");
        for (int i = pos-3; i >0 ; i-=3) {
            num.insert(i,",");
        }
        System.out.println(num);
    }
}

3.4 面试题:

请说出代码的运行结果?

从零学Java - String类,从零学Java,java,python,开发语言

第一题图解:

从零学Java - String类,从零学Java,java,python,开发语言

第二题图解:

从零学Java - String类,从零学Java,java,python,开发语言

如果将图2中的s4和s5换一下位置, 运行结果是?

从零学Java - String类,从零学Java,java,python,开发语言

4 正则表达式

概念: 正则表达式就是一个验证字符串格式是否满足要求的字符串,使用一个字符串匹配一组字符串,这个字符串就是正则表达式。

正则表达式的用途

  • 匹配 拆分 获取 替换

4.1 元字符

概念: 正则表达式中通常包含一些具有特殊含义的字符。

字符 解释
a 匹配字符****a
[abc] 匹配 a或b或c
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[ ^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[ ^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

4.2 其他字符

4.2.1 预定义字符
字符 解释
. 任意字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\w 单****个字符:[a-zA-Z_0-9]
4.2.2 边界匹配
字符 解释
^ 表示行开始
$ 表示行结束
4.2.3 数量
字符 解释
X? 一次或0次
X* 0次或多次(包括1次)
X+ 一次或多次
X{n} 恰好n次
X{n, } 至少n次
X{n,m} 至少n次,不超过m次

4.3 正则表达式的应用

正则表达式大全文章来源地址https://www.toymoban.com/news/detail-781751.html

4.3.1 匹配
//1 匹配
//手机号
String reg = "^1[35789][0-9]{9}$";
String phone = "11632145345";
System.out.println(phone.matches(reg));

//创建模式对象
Pattern p = Pattern.compile("^1[35789][0-9]{9}$");
//获取匹配器
Matcher m = p.matcher("16632145345");
//调用匹配器的matcher()
boolean b = m.matches();
System.out.println(b);

//qq邮箱
String reg2 = "^[1-9][0-9]{4,9}@[qQ]{2}.[cC][oO][Mm]$";
String qq = "14312354@Qq.com";
System.out.println(qq.matches(reg2));
4.3.2 拆分
//2 拆分
String s = "this is a text";
/*
	一个符号用双引号包裹即可
	多个符号先用双引号再用中括号包裹
	+ 表示前面的符号可以出行1次或多次
*/
String[] arr = s.split("[ .]+");
System.out.println(arr.length);
for (String string : arr) {
	System.out.println(string);
}
4.3.3 获取
//3 获取
String s1 = "Java是世界上最好的语言,java第一,Java真牛";
//需求: 获取字符串中的 Java 字符 (不区分大小写)
Pattern p1 = Pattern.compile("[jJ]ava");
Matcher m1 = p1.matcher(s1);
//find(); 找到则返回true, 没有找到则返回false
while (m1.find()) {
    //group(); 返回找到的数据
    System.out.println(m1.group());
}
4.3.4 替换
//4 替换
String s2 = s1.replaceAll("[jJ]ava", "JAVA");
System.out.println(s2);

Pattern p3 = Pattern.compile("[jJ]AVA");
Matcher m3 = p3.matcher(s2);
String s3 = m3.replaceAll("Python");
System.out.println(s3);

到了这里,关于从零学Java - String类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零学Java 多线程(基础)

    1.1 多任务 现实生活中太多这样同时做多件事的例子了,看起来是多个任务同时都在做,其实本质上我们的大脑在同一时间依旧只能做一件事 1.2 多线程 原来是一条路,慢慢地因为车变多了,造成了道路堵塞,使通行效率变低。 为了提高使用的效率,能够充分利用道路,于是

    2024年01月19日
    浏览(47)
  • 从零学Java 线程安全的集合

    Collection体系集合、以及线程安全集合。 注:下划线代表线程安全集合 Collections中的工具方法 Collections工具类中提供了多个可以获得线程安全集合的方法。 public static Collection synchronizedCollection(Collection c) public static List synchronizedList(List list) public static Set synchronizedSet(Set s) public

    2024年01月17日
    浏览(34)
  • 【从零开始学习JAVA | 第八篇】String类

    目录 前言: String类: 常见的认识误区: 创建String类:  注意点: 总结:         String类是Java中最常见的一个类,本篇将对Stirng类的各种功能进行详细的介绍,各位小伙伴如果感兴趣可以点击进来观看。 Java中的String类是一个非常常用的类, 它表示一串字符序列 。Java的字

    2024年02月10日
    浏览(54)
  • Jeecg-Boot 低代码开发平台之路(一) —— 开始从零学起

    今天开始详细学习下 Jeecg-Boot 低代码开发平台,官方网站对该平台的介绍是如下。 JeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x,SpringCloud,Ant DesignVue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! Jee

    2023年04月08日
    浏览(91)
  • 55从零开始学Java55之String字符串的编码

    在上一篇文章中,给大家介绍了 String字符串及其各种常用API方法 ,这些内容并没有什么特别难的地方。但因为String字符串很常用,所以我们在使用它的过程中,可能会面临各种问题, 比如”中文乱码“问题等。那么为什么中文会乱码?我们该怎么解决这个问题?今天会带大

    2024年02月06日
    浏览(71)
  • 从零开始学习 Java:简单易懂的入门指南之API、String类(八)

    1.1API概述 什么是API ​ API (Application Programming Interface) :应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如

    2024年02月14日
    浏览(44)
  • java开发中常见的String对象

    String对象加载场内存方式有两种,一种是直接使用“”号创建的加载内存时会会把该字符串直接加载到字符常量中去,并且后文中出现相同使用“”号定义的常量时不会再在内存中创建直接使用第一次创建的字符串,另一种直接使用构造器创建的会创建出一个新的字符串,

    2024年02月11日
    浏览(41)
  • 从零学算法

    1575.给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量 每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j != i 且 0 = j locations.length ,并移动到城市 j 。从

    2024年02月06日
    浏览(26)
  • 从零学算法295

    295 .中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。 例如 arr = [2,3,4] 的中位数是 3 。 例如 arr = [2,3] 的中位数是 (2 + 3) / 2 = 2.5 。 实现 MedianFinder 类: MedianFinder() 初始化 MedianFinder 对象。 void addNum(int num) 将数据流中的

    2024年02月09日
    浏览(37)
  • 从零学算法34

    34 .给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1: 输入:nums = [5,7,7,8,8,10], target

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包