【前端学java】详解java中的字符串操作(11)

简介: 【8月更文挑战第10天】详解java中的字符串操作

字符串的创建

同前端代码一样,java中的字符创建非常简单

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        // 字符串创建
        String name = "shixiaoshi";
    }
}

java中字符串的创建是基于java.lang.String这个类的,这意味着,字符串的创建实际上是这样的

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        // 字符串完成的创建方式
        String name = new String("shixiaoshi") ;
    }
}

实际开发中应该使用那种?

答案显而易见,使用双引号直接声明更方便快捷!
java虚拟机基于第一种创建方式有内部优化,所有相同的字符数据,其实来源于同一个字符串对象,这样就可以降低频繁的new String()带来的资源和内存消耗了。

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        // 字符串完成的创建方式
        String name = new String("shixiaoshi") ;
        String name1 = new String("shixiaoshi") ;
        String name2 = "shixiaoshi";
        String name3 = "shixiaoshi";
        System.out.println(name == name1);   // false
        System.out.println(name1 == name2);  // false
        System.out.println(name2 == name3);  // true
    }
}

上述代码验证了通过new String创建完全相同的字符串,结果也是不同的字符对象;通“”直接创建的字符,结果是相同的。

字符串和字符是不相同的概念

要注意的是,字符串和字符是不一样的,比如字符串“8石f”,实际是由“8”、“石”、“f”三个字符组成的。
我们在来复习一下java中的基本数据单位概念。

基本数据单位

在Java中,最小的的数据单位是Byte,也就是字节类型,1 字母 = 1 byte ,一个汉字是一个字符,占两个字节。

之前的学习中,我们介绍了基本数据类型。每种数据类型的字节数都是不尽相同的,我们来复习一下:
整型数据类型(整数):

  • byte:1个字节,范围为-128到127
  • short:2个字节,范围为-32,768到32,767
  • int:4个字节,范围为-2,147,483,648到2,147,483,647
  • long:8个字节,范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807

浮点型数据类型(小数):

  • float:4个字节,范围为±3.40282347E+38F(有效位数为6-7位)
  • double:8个字节,范围为±1.7976931348623157E+308(有效位数为15位)

字符型数据类型:

  • char:2个字节,表示一个Unicode字符

布尔型数据类型:

  • boolean:表示逻辑值,只能是true或false

现在,我们应该能清除的知道,"8石f" 这个字符串的构成了

字符串 8石f
字符 8 f
字节 1 1 1 1

通过上述例子,我们也能明白,字符串实际就是一个特殊的字符数组拼接而成的。

通过字符数组创建字符串

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        char[] name = {
   
   '石','小','石'};
        String names = new String(name);
        System.out.println(names);   // 石小石
    }
}

注意,char[] name = {'石','小','石'} 代码中,用的是单引号而不是双引号,使用双引号会报错。
java中的单引号表示字符,一般是char类型的;java中的双引号是字符串,是String类型的。

转义字符

我们如果想打印一个引号,该怎么做呢?
image.png
直接打印必然报错,我们只需要加一个转义字符即可!

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        System.out.println("\"");   // "
    }
}

字符串的操作

拼接

和前端一样,字符串的拼接可以直接用 + 号;其作用和前端的+用法效果是一致的。

String name = "shi" + "xiao" + "shi";

这种形式创建的字符等同于下面方式创建的字符

String name1 = "shixiaoshi";

这两种形式创建的字符其实完全一样

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        // 拼接
        String name = "shi" + "xiao" + "shi";
        String name1 = "shixiaoshi";
        System.out.println(name.hashCode() == name1.hashCode()); // true
    }
}

hashCode方法用于返回对象的内存地址,因此可以判断两个字符对象相同。

比较

要比较两个字符串是否相同,可以用equals。

equals用于判断两个对象是否相等。默认情况下,equals()方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        String a = "shi";
        String b = "shi";
        System.out.println(a.equals(b));    // true
    }
}

equals是区分大小写的

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        String a = "shi";
        String b = "SHI";
        System.out.println(a.equals(b));  // fasle
    }
}

如果想忽略大小写,可以用equalsIgnoreCase
GIF 2023-10-16 16-09-13.gif

截断

substring

java中的字符截断方法substring和前端的字符截断方法substring也是一致的

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        String java = "hello world";
        System.out.println(java.substring(0,5));   // hello
    }
}


       for (int i=0;i < s.length;i++){
   
   
           System.out.println(s[i]);
       }

split

splitf方法将一个字符分隔成数组,和前端用法也是一致的
GIF 2023-10-16 16-34-32.gif

trim

trim() 方法用于删除字符串的头尾空白符。这和前端中的trim方法用法也是一样的

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        String a = " hello world ";
        System.out.println(a.trim());
    }
}

替换

repalce

replace() 方法通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。

public String replace(char oldChar,char newChar)

它的第一个参数只能是字符或字符串

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        String a = "hello hello world";
        System.out.println(a.replace("hello","hi"));  // hi hi world
    }
}

注意,这和前端中的replace是有些区别的。前端中:replace用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

<script>
  var str = "Hello Hello World!";
let index = str.replace(/Hello/i, "hi");
console.log(index); // hi Hello World!
</script>

前后端replace区别
1、java中replace第一个参数只能是字符或者是字符串;而js可以是正则。
2、java中replace替换后,所有匹配到的字符都会变化;而js中,匹配的字符只会替换第一个。

replaceAll

replaceAll() 方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。
语法

public String replaceAll(String regex, String replacement)

参数

  • regex -- 匹配此字符串的正则表达式。
  • newChar -- 用来替换每个匹配项的字符串。
    public class Object_01 {
         
         
      public static void main(String[] args) {
         
         
          String a = "hello hello world";
          System.out.println(a.replaceAll("hello|world","hi"));  // hi hi hi
      }
    }
    

    js中的repalceAll用法和这个也是大同小异的

大小写转换

java中的字符大小写转换和前端是一致的

public class Object_01 {
   
   
    public static void main(String[] args) {
   
   
        String a = "Hello";
        System.out.println(a.toLowerCase()); // hello
        System.out.println(a.toUpperCase()); // HELLO
    }
}
相关文章
|
2月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
53 1
|
9天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
28 15
|
12天前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
38 4
|
27天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
44 3
|
27天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
13 2
|
1月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
16 2
|
1月前
|
前端开发 JavaScript
前端基础(十五)_时间对象、字符串对象
本文介绍了JavaScript中时间对象的操作方法,包括获取和设置年、月、日、小时、分钟、秒等,以及如何格式化时间显示,同时提及了字符串对象的常用方法。
29 0
前端基础(十五)_时间对象、字符串对象
|
1月前
|
Java
Java实现:将带时区的时间字符串转换为LocalDateTime对象
通过上述方法,你可以将带时区的时间字符串准确地转换为 `LocalDateTime`对象,这对于处理不需要时区信息的日期和时间场景非常有用。
452 4
|
1月前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
109 11