Java中的字符串String

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

目录

一、常用方法

1、字符串构造

2、String对象的比较

(1)、equals方法

(2)、compareTo方法

(3)、compareToIgnoreCase方法(忽略大小写进行比较)

3、字符串查找

4、转化

(1)数值和字符串转化

​编辑

(2)大小写转换

(3)字符串转数组

(4)格式化

5、字符串替换

6、字符串拆分

7、字符串截取

8、其他操作方法

二、String的不可变性

三、StringBuffer和StingBuilder

1、方法:

2、String、StringBuffer、StringBuilder的区别


一、常用方法

1、字符串构造

三种构造方法

(1)、直接赋值

String s1 = "hello world";
System.out.println(s1);

(2)、创建出新的对象

String s2 = new String("hello");
System.out.println(s2);

(3)、使用字符数组进行构造

char[] ch = {'h','e','l','l','o'};
String s3 = new String(ch);
System.out.println(s3);

三个输出效果如下:

Java中的字符串String,java,开发语言

2、String对象的比较

对于基本变量,可以直接用 “==, <,  >,  <=, >= ”来进行比较,但对于引用类型变量,不可以直接使用上面的表达式来比较,如图:

代码:

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);

Java中的字符串String,java,开发语言

s1和s2的内容都是一样的,为啥下面输出false呢?

原因是s1和s2是引用类型,使用上述表达式进行比较,比较的是两个对象的地址,两个对象是不同的,地址自然也是不同的。

那么怎么可以比较引用对象的内容呢?有以下方法:

(1)、equals方法

        按照字典序比较,字典序:字符大小。

Object的equals默认是按 “==” 进行比较的,如图:

Java中的字符串String,java,开发语言

所以类都默认继承Object类,String继承Object类,重写了equals方法,如图:

Java中的字符串String,java,开发语言

方法的使用:

代码:

        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1.equals(s2));

        String s3 = new String("Hello");
        System.out.println(s1.equals(s3));

执行效果:

Java中的字符串String,java,开发语言

(2)、compareTo方法

按照字典序比较,和equals方法不同的是:equals返回的是boolean类型,而compareTo返回的是int类型,具体比较方式:

        1、先按照字典序大小比较,如果出现不相等的字符,直接返回这两个字符的大小差值。

        2、如果前k个字符相同,返回两个字符串长度差值。

方法内部:

public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

方法使用:

代码:

        String s1 = new String("ab");
        String s2 = new String("ac");
        String s3 = new String("ab");
        String s4 = new String("abcdef");
        System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1
        System.out.println(s1.compareTo(s3)); // 相同输出 0
        System.out.println(s1.compareTo(s4)); // 前k个字符完全相同,输出长度差值 -3

执行效果:

Java中的字符串String,java,开发语言

(3)、compareToIgnoreCase方法(忽略大小写进行比较)

与compareTo方法一样,不过忽略大小写

方法内部:

Java中的字符串String,java,开发语言

public static final Comparator<String> CASE_INSENSITIVE_ORDER
                                         = new CaseInsensitiveComparator();
    private static class CaseInsensitiveComparator
            implements Comparator<String>, java.io.Serializable {
        // use serialVersionUID from JDK 1.2.2 for interoperability
        private static final long serialVersionUID = 8575799808933029326L;

        public int compare(String s1, String s2) {
            int n1 = s1.length();
            int n2 = s2.length();
            int min = Math.min(n1, n2);
            for (int i = 0; i < min; i++) {
                char c1 = s1.charAt(i);
                char c2 = s2.charAt(i);
                if (c1 != c2) {
                    c1 = Character.toUpperCase(c1);
                    c2 = Character.toUpperCase(c2);
                    if (c1 != c2) {
                        c1 = Character.toLowerCase(c1);
                        c2 = Character.toLowerCase(c2);
                        if (c1 != c2) {
                            // No overflow because of numeric promotion
                            return c1 - c2;
                        }
                    }
                }
            }
            return n1 - n2;
        }

方法的使用:

代码:

String s1 = new String("hello");
        String s2 = new String("Hello");
        System.out.println(s1.compareToIgnoreCase(s2));

执行效果:

Java中的字符串String,java,开发语言

3、字符串查找

方法 功能
char charAt(int index) 返回index位置上字符,如果index为负数或者越界,抛出
IndexOutOfBoundsException异常
int indexOf(int ch) 返回ch第一次出现的位置,没有返回-1
int indexOf(int ch, int
fromIndex)
从fromIndex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str) 返回str第一次出现的位置,没有返回-1
int indexOf(String str, int
fromIndex)
从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch) 从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch, int
fromIndex)
从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返
回-1
int lastIndexOf(String str) 从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str, int
fromIndex)
从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返
回-1

4、转化

(1)数值和字符串转化

数值转字符串:

        String s1 = String.valueOf(1234);
        String s2 = String.valueOf(12.34);
        System.out.println(s1);
        System.out.println(s2);

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

        String s3 = String.valueOf(true);
        String s4 = String.valueOf(new Student("Hanmeimei", 18));
        System.out.println(s3);
        System.out.println(s4);

Java中的字符串String,java,开发语言

整型转换为字符串型的内部代码:

    public static String valueOf(int i) {
        return Integer.toString(i);
    }

double类型转换为字符串型代码:

    public static String valueOf(double d) {
        return Double.toString(d);
    }

boolean转换为字符串的内部代码:

    public static String valueOf(boolean b) {
        return b ? "true" : "false";
    }

引用类型转换为字符串型的内部代码:

    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

字符串转换为整型 / double类型:

代码:

int data1 = Integer.parseInt("1234");
Double data2 = Double.parseDouble("12.34");

如图,执行效果:

Java中的字符串String,java,开发语言


(2)大小写转换

代码:

        String s1 = "hello";
        String s2 = "HELLO";
        //小写转大写
        System.out.println(s1.toUpperCase());
        //大写转小写
        System.out.println(s2.toLowerCase());

执行效果:

Java中的字符串String,java,开发语言

(3)字符串转数组

代码:

//字符串转数组
char[] ch = s1.toCharArray();
//数组转字符串
String s2 = new String(ch);

执行效果

Java中的字符串String,java,开发语言

(4)格式化

代码:

String s = String.format("%d-%d-%d", 2023, 11, 21);

执行效果:

Java中的字符串String,java,开发语言

5、字符串替换

使用一个新的字符串替换旧的字符串,方法如下:

方法 功能
String replaceAll(String regex, String replacement) 替换所有的指定内容
String replaceFirst(String regex, String replacement) 替换首个内容

代码:

String str = "hello world";
System.out.println(str.replaceAll("l", "-"));
System.out.println(str.replaceFirst("l", "-"));

执行效果:

Java中的字符串String,java,开发语言

6、字符串拆分

可以将一个完整的字符串按照指定的分隔符划分成若干个字符子串

方法 功能
String[] split(String regex) 将字符串全部拆分
String[] split(String regex, int limit) 将字符串以指定的格式,拆分为limit组

代码:

        String s1 = "hello world hello bit";
        String[] result = s1.split(" ");
        for(String x : result) {
            System.out.println(x);
        }

执行效果:
Java中的字符串String,java,开发语言

字符串的部分拆分代码:
 

        String s1 = "hello world hello bit";
        String[] result = s1.split(" ", 2);
        for(String x : result) {
            System.out.println(x);
        }

Java中的字符串String,java,开发语言

拆分IP地址:
 

        String s1 = "192.168.1.1";
        String[] result = s1.split("\\.");
        for(String x : result) {
            System.out.println(x);
        }

执行效果:

Java中的字符串String,java,开发语言

注意:要写划分ip地址,在字符串里写进转义字符,在字符串里,两个 “ \\ ” 代表一个 “ \ ” 

1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\" ,那么就得写成 "\\\\" .
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

如下:

        String s1 = "192.16-8.1.1";
        String[] result = s1.split("\\.|-");
        for(String x : result) {
            System.out.println(x);
        }

Java中的字符串String,java,开发语言

代码示例: 多次拆分
 

String str = "name=zhangsan&age=18" ;
String[] result = str.split("&") ;
for (int i = 0; i < result.length; i++) {
String[] temp = result[i].split("=") ;
System.out.println(temp[0]+" = "+temp[1]);
}

7、字符串截取

从一个完整的字符串截取出部分内容,方法如下:

方法 功能
String substring(int beginIndex) 从指定索引截取到结尾
String substring(int beginIndex, int endIndex) 截取部分内容

代码:

        String s = "helloworld";
        System.out.println(s.substring(5));
        System.out.println(s.substring(0, 5));

执行效果:

Java中的字符串String,java,开发语言

注意:区间是是前闭后开的规则,上面的第二个substring语句,是 [0,5)。所以不包含5下标。

8、其他操作方法

方法 功能
String trim() 去掉字符串中的左右空格,保留中间空格
String toUpperCase() 字符串转大写
String toLowerCase() 字符串转小写

trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符等).
后面两个函数只转换字母


二、String的不可变性

String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改,是因为:
1. String类在设计时就是不可改变的,String类实现描述中已经说明了
Java中的字符串String,java,开发语言

String类中的字符实际保存在内部维护的value字符数组中,该图还可以看出:
1. String类被final修饰,表明该类不能被继承。
2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

2. 所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
比如 replace 方法:
Java中的字符串String,java,开发语言

原因不是final,

final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的
代码验证如下:

final int array[] = {1,2,3,4,5};
array[0] = 100;
System.out.println(Arrays.toString(array));
//array = new int[]{4,5,6}; //java: 无法为最终变量array分配值

执行效果:

Java中的字符串String,java,开发语言

Java中的字符串String,java,开发语言

注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下,尽量避免对String的直接修改,如果要修改建议尽量使用StringBuffer或者StringBuilder。


三、StringBuffer和StingBuilder

1、方法:

方法 说明
StringBuff append(String
str)
在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、
double、float、int、long、Object、String、StringBuff的变量
char charAt(int index) 获取index位置的字符
int length() 获取字符串的长度
int capacity() 获取底层保存字符串空间总的大小
void ensureCapacity(int
mininmumCapacity)
扩容
void setCharAt(int index,
char ch)
将index位置的字符设置为ch
int indexOf(String str) 返回str第一次出现的位置
int indexOf(String str, int
fromIndex)
从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str) 返回最后一次出现str的位置
int lastIndexOf(String str,
int fromIndex)
从fromIndex位置开始找str最后一次出现的位置
StringBuff insert(int
offset, String str)
在offset位置插入:八种基类类型 & String类型 & Object类型数据
StringBuffer
deleteCharAt(int index)
删除index位置字符
StringBuffer delete(int
start, int end)
删除[start, end)区间内的字符
StringBuffer replace(int
start, int end, String str)
将[start, end)位置的字符替换为str
String substring(int start) 从start开始一直到末尾的字符以String的方式返回
String substring(int
start,int end)
将[start, end)范围内的字符以String的方式返回
StringBuffer reverse() 反转字符串
String toString() 将所有字符按照String的方式返回

String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。

和StringBuffer的区别也是。频繁修改字符串的情况考虑使用StringBuilder / StringBuffer

2、String、StringBuffer、StringBuilder的区别

(1)String的内容不可修改,StringBuffer和StringBuilder的内容可修改。

(2)StringBuffer和StringBuilder的大部分功能一样。

(3)StringBuffer采用同步处理,属于线程安全操作,StringBuilder未采用同步处理,不属于线程安全操作。文章来源地址https://www.toymoban.com/news/detail-752225.html


都看到这了,点个赞再走吧,谢谢谢谢谢!!

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

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

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

相关文章

  • Java的String(字符串详解)

    主要有三种,一种是直接使用常量去构造,要么使用new String来构造,或者还可以使用字符数组的形式。 String 类型本身并不存储数据,而是存储指向该字符串的引用,所以字符串类型是一个类,s1是一个引用,指向这个类。而这个类有两个成员变量,一个名称为value,这也是一

    2024年02月07日
    浏览(18)
  • Java Base64字符串与String字符串互转方法

    在使用String转Base64和Base64转String上有点小问题,特此记录。 结果: 也是跟上面差不多的思路,将Base64转为byte数组,再转为String

    2024年02月15日
    浏览(14)
  • Java截取String字符串的方法

    1.指定字符截取字符串,返回字符串数组 2.指定索引,截取字符串 3.通过StringUtils类截取字符串

    2024年04月22日
    浏览(9)
  • String字符串分割的3种方法 Java

    使用了 split(string) 方法通过指定分隔符将字符串分割为数组 在java.lang包中有String.split()方法,返回是一个数组。“.”和“|”都是转义字符,必须得加\\\"“; 如果用“.”作为分隔的话,必须是如下写法:String.split(”.“),这样才能正确的分隔开,不能用String.split(”.“); 如果用“

    2024年01月24日
    浏览(12)
  • 【Java】Java 中格式化字符串:String.format() 方法

    本文仅供学习参考! 相关文章地址: https://www.cnblogs.com/Dhouse/p/7776780.html https://www.javatpoint.com/java-string-format https://www.geeksforgeeks.org/java-string-format-method-with-examples/ 前言 虽然 System.out.println() 适合调试和显示简单消息,但它不太适合格式化字符串。格式化字符串不仅显示字符串

    2024年02月11日
    浏览(17)
  • Java 字符串数组定义_「string数组」string 数组怎么定义

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 点击跳转浏览。 String arr[] = new String[10]; //创建一个长度为10的String 类型数组。 String arr[] = {“张三”,“李四”}; 这个是最常用的 String[] arr = new String[10];

    2024年02月15日
    浏览(11)
  • java 字符串转数组(String to Array)

    java 字符串转数组(String to Array) 数组转List、 判断String数组中是否包含某个字符串

    2024年02月12日
    浏览(20)
  • Java字符串知多少:String、StringBuffer、StringBuilder

    String 是 Java 中使用得最频繁的一个类了,不管是作为开发者的业务使用,还是一些系统级别的字符使用, String 都发挥着重要的作用。 String 是 不可变 的、 final 的,不能被继承,且 Java 在运行时也保存了一个字符串池(String pool) ,就使得 String 变得很特殊。 实现三个接口:

    2024年02月06日
    浏览(16)
  • Java中String字符串替换3种方法详解

    replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串) 字符串.replace(String oldChar, String newChar) replaceFirst() 方法用于将目标字符串中匹配某正则表达式的第一个子字符串替换成新的字符串 字符串.replaceFirst(String regex, String replacement) replaceAll() 方法用于将目标字

    2024年02月11日
    浏览(23)
  • java8 list对象string字符串求和

    Java 8 中可以使用 Stream API 和 reduce() 方法来对 List 中的字符串进行求和。 举个例子,假设你有一个 List 叫做 \\\"numbers\\\",你可以这样求和: 或者这样求和 这样得到的结果就是 \\\"12345\\\"。 在这个例子中,我们使用 reduce() 方法对 List 中的所有字符串进行求和,其中第一个参数是初始值

    2024年02月15日
    浏览(20)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包