【前端学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
    }
}
相关文章
|
7月前
|
SQL JSON Java
告别字符串拼接:用Java文本块优雅处理多行字符串
告别字符串拼接:用Java文本块优雅处理多行字符串
526 108
|
9月前
|
SQL JSON Java
告别拼接噩梦:Java文本块让多行字符串更优雅
告别拼接噩梦:Java文本块让多行字符串更优雅
759 82
|
9月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
454 14
|
11月前
|
前端开发
前端使用正则表达式检查是否为十六进制字符串
前端使用正则表达式检查是否为十六进制字符串
257 6
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
363 83
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
295 17
|
存储 缓存 安全
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
328 13
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
272 60
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
278 26