【前端学java】java中的字符串操作(10)

字符串的创建

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

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

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

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

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

答案显而易见,使用双引号直接声明更方便快捷!

java虚拟机基于第一种创建方式有内部优化,所有相同的字符数据,其实来源于同一个字符串对象,这样就可以降低频繁的new String()带来的资源和内存消耗了。

java 复制代码
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

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

通过字符数组创建字符串

java 复制代码
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类型的。

转义字符

我们如果想打印一个引号,该怎么做呢?

直接打印必然报错,我们只需要加一个转义字符即可!

java 复制代码
public class Object_01 {
    public static void main(String[] args) {
        System.out.println(""");   // "
    }
}

字符串的操作

拼接

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

java 复制代码
String name = "shi" + "xiao" + "shi";

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

java 复制代码
String name1 = "shixiaoshi";

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

java 复制代码
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()方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。

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

equals是区分大小写的

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

如果想忽略大小写,可以用equalsIgnoreCase

截断

substring

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

java 复制代码
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方法将一个字符分隔成数组,和前端用法也是一致的

trim

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

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

替换

repalce

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

java 复制代码
public String replace(char oldChar,char newChar)

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

java 复制代码
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用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

js 复制代码
<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 替换字符串所有匹配给定的正则表达式的子字符串。

语法

java 复制代码
public String replaceAll(String regex, String replacement)

参数

  • regex -- 匹配此字符串的正则表达式。
  • newChar -- 用来替换每个匹配项的字符串。
java 复制代码
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中的字符大小写转换和前端是一致的

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
    }
}
相关推荐
yours_Gabriel10 分钟前
【微服务】认识微服务
java·微服务·架构
Adolf_199321 分钟前
Django 自定义路由转换器
后端·python·django
ThetaarSofVenice25 分钟前
【Java从入门到放弃 之 Java程序基础】
java·开发语言·python
夏子曦34 分钟前
java——Tomcat调优策略
java·开发语言·tomcat
夏子曦37 分钟前
java——利用 Tomcat 自定义的类加载器实现热加载
java·tomcat
G丶AEOM38 分钟前
Redis中HGETALL和ZRANGE命令
java·redis
In 202941 分钟前
矩阵【Lecode_HOT100】
java·算法·矩阵
王·小白攻城狮·不是那么帅的哥·天文1 小时前
Spring框架使用xml方式配置ThreadPoolTaskExecutor线程池,并且自定义线程工厂
xml·java·spring·线程池
ᝰꫝꪉꪯꫀ3611 小时前
JavaWeb——Mybatis
java·开发语言·后端·mybatis
机器之心1 小时前
跨模态大升级!少量数据高效微调,LLM教会CLIP玩转复杂文本
人工智能·后端