首页 > 编程语言 >java-String类

java-String类

时间:2024-03-28 20:00:32浏览次数:27  
标签:java String int System str println out

1,字符串构造

分为三种方法:

String s1 = "hello world";

String s2 = new String("hello world");

char[] array = {'h','e','l','l','o'}; String s3 = new String(array)

String为引用类型,存储的并不是字符本身。

String s1 = new String("hello");

String s2 = new String("world");

String s3 = s1;

s1,和s2指向的是不同的对象,这时s3 = s1,将s1的对象的地址赋值给s3,则s3存储的也是s1的对象的地址,所以s1和s3指向同一个对象。

2,String对象的比较

1,基本类型变量

int a = 10; int b = 20; int c = 10;

System.out.println(a == b);  System.out.println(a == c);

前者为false,后者为true。因为int为基本类型变量,比较的为变量存储的值是否相同

2,,String引用类型变量

String为引用类型变量,比较两个引用变量引用的是否为同一个对象

String s1 = new String("hello");

String s2 = new String("hello");

String s3 = new String("world");

String s4 = s1;

System.out.println(s1 == s2); false

System.out.println(s2 == s3);  false

System.out.println(s1 == s4);  true

3,equals比较

如果用重写的equals进行比较(在JAVA接口详解详细介绍了),则

System.out.println(s1.equals(s2));  true

System.out.println(s1.equals(s3));  false

4,int compareTo(String s) 方法

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

2,如果前k个字符相等(k为两字符串中较短字符串的长度),返回两字符串的长度差值(为负数)

String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("abc");
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));  -3

5, int compareToIgnoreCase(String str) 方法

compareToIgnoreCase与compareTo方法类似,只是compareToIgnoreCase比较时忽略字符大小写。

String s1 = new String("abc");
String s3 = new String("ABc");
System.out.println(s1.compareToIgnoreCase(s3));//0

3,字符串查找

(1)char charAt(int index):返回index位置上字符,如果index为负数或者越界,抛出 IndexOutOfBoundsException异常

String arr="abcdefg";
System.out.println(arr.charAt(2));
System.out.println(arr.charAt(10));

(2)int  indexOf (int ch):返回ch第一次出现的位置,没有返回-1

String arr="abcdefg"; 
System.out.println(arr.indexOf('f'));//5
System.out.println(arr.indexOf('z'));//-1

(3)int indexOf(int ch, int fromIndex):从fromIndex位置开始找ch第一次出现的位置,没有返回-1

String arr="abcdefg";
System.out.println(arr.indexOf('d', 1));//3
System.out.println(arr.indexOf('d', 4));//-1

(4)int indexOf(String str):返回str第一次出现的位置,没有返回-1

String arr="abcdefgabcdef";
System.out.println(arr.indexOf("ef"));//4

(5)int indexOf(String str, int fromIndex):从fromIndex位置开始找str第一次出现的位置,没有返回-1

String arr="abcdefgabcdef";
System.out.println(arr.indexOf("ef", 8));//11

(6)int lastIndexOf(int ch):从后往前找,返回ch第一次出现的位置,没有返回-1

String arr="abcdefgabcdef";
System.out.println(arr.lastIndexOf('a'));//7

(7)int lastIndexOf(int ch, int fromIndex):从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返 回-1

String arr="abcdefgabcdef";
System.out.println(arr.lastIndexOf('d', 12))//10

(8)int lastIndexOf(String str):从后往前找,返回str第一次出现的位置,没有返回-1

String arr="abcdefgabcdef";
System.out.println(arr.lastIndexOf("de"));//10

(9)int lastIndexOf(String str, int fromIndex):从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

String arr="abcdefgabcdef";
System.out.println(arr.lastIndexOf("de",6));//3

4,转化

(1)数字转字符串: String.valueOf();

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

(2)将字符串转化成数字

int a = Integer.parseInt("1234");
double b = Double.parseDouble("12.34");
System.out.println(a);
System.out.println(b);

(3)大小写转化

1,小写转大写:toUpperCase()

2,大写转小写:toLowerCase()

public static void main(String[] args) {
        String s1 = "Hello";
        String s2 = "HELLo";
        System.out.println(s1.toUpperCase());//HELLO
        System.out.println(s2.toLowerCase());//hello
    }

(4)字符串转数组:toCharArray()

 String s = "hello";
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.print(ch[i]);
        }
        System.out.println();

(5)格式化:format()

String ss = String.format("%d-%d-%d", 2024,3,26);
System.out.println(ss);2024-3-26

5,字符串替换

String replaceAll(String regex, String replacement);

String replaceFirst(String regex, String replacement)

String str = "helloworld" ;
    System.out.println(str.replaceAll("l", "_"));
    System.out.println(str.replaceFirst("l", "_"));
he__owor_d
he_loworld

6,字符串拆分

String[] split(String regex):其中regex为拆分依据

String[] split(String regex, int limit):limit为限制拆分的组数

String str = "hello world" ;
String[] result = str.split(" ") ;  按照空格拆分
for(String s: result) {
    System.out.println(s);
}

hello
world

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

hello
world hello world

注意:

1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .

2. 而如果是 "\" ,那么就得写成 "\\\\" .

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]);
}

name = zhangsan
age = 18
 

7,字符串截取

String substring(int beginIndex):从指定索引截取到结尾

String substring(int beginIndex, int endIndex):截取部分内容

String str = "helloworld" ;
System.out.println(str.substring(5));//world
System.out.println(str.substring(0, 5));//hello

注意:str.substring(0, 5),为 [0,5)

8,字符串的不可变性

String str=“abc“;

String str=“ABC“;相当于产生了全新的对象,存放的为“ABC”的地址

我们通过数组来类比字符串,探求字符串的不可变性

int [] array=new int []{1,2,3};
array=new int[]{4,5,6};将另一个数组的地址赋值给array(可以运行)
array[0]=99;改变array数组中的值(可以运行)
final int [] array=new int []{1,2,3};
array=new int[]{4,5,6};(报错)
array[0]=99;(可以运行)
->说明了array指向的value的值是不能发生改变的,而value指向的对象中的内容可以发生改变
->也就是说只要拿到String对象的引用,就可以改变其中的内容

但是在String的原生代码,是这样定义String的<private final byte[ ] value>。final修饰使String所指value不能改变,而private修饰,则在类外无法拿到value这个引用。综上所述,字符串不能被改变

9,字符串修改

注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

例如:

String str=new String("abc");问:在不考虑常量池的情况下 ,创建了几个对象。2个
String str=new String("a")+new String("b");
问:在不考虑常量池的情况下 ,创建了几个对象。答最少6个(4+“a”和“b”’的拼接+在创建一个对象把拼接好的放进去=6个)

10,StringBuilder和StringBuffer

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。

String str="hello";
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append(str);
stringBuilder.append("world");
str=stringBuilder.toString();
System.out.println(str);

注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

String变为StringBuilder: 利用StringBuilder的构造方法或append()方法

StringBuilder变为String: 调用toString()方法。

我们通过实例化一个对象直接修改或者对象里面的内容,这样可以有效的防止创建多个对象。

两者的区别在于Stringbuffer线路安全,适用于多线路问题

标签:java,String,int,System,str,println,out
From: https://blog.csdn.net/2302_81705247/article/details/137029748

相关文章

  • java毕业设计基于微信小程序的电影售票系统[附源码]
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着移动互联网的快速发展,微信小程序作为一种新型的应用形式,以其无需下载安装、使用方便的特点,受到了广大用户的青睐。电影作为一种重要的娱乐方式,已经成为了人们......
  • 当 go 与 Java 相碰时,有什么不同?
    Go与Java全面对比及实际应用学习指南第一部分基础内容分析引言在快速发展的软件行业中,编程语言的选择对于项目的成功至关重要。Go与Java是目前两个非常流行的编程语言,本文将深入剖析这两种语言的特点,并对它们进行全面的比较。历史与哲学Go语言由Google在2009年推出,目......
  • 重生前端之我在javascript敲代码(03-数组)
    一.数组(重点)思考:如何保存一个班级的所有学生的姓名?回答:一种方法利用前面学习过的知识,则每一条信息都需要一个变量去保存,缺点是这样做很麻烦,而且容易出错,又不合理;另一种方法就是利用数组。概念:数组是存储一系列值的变量集合,可以存储多个值。1.1语法数组构成:数组由一个或......
  • JavaScript数据类型
    JS数据类型整体分为两大部分:基本数据类型引用数据类型基本数据类型    Number数字型    数学中学习到的数字,可以是整数,小数,正数,负数。    JavaScript中的正数,负数,小数等统一称为数字类型。 注意事项    JS是弱数据类型,变量到底......
  • STL之string
    c++STL之string1.介绍string是一个字符串类,可以理解成和int一样定义;初始化和头文件#include<string>//当然也可以用万能头文件#include<bits/stdc++.h>//定义方式stringstr;//可以初始化stringstr("ljj");//多条初始化stringstr(3,'27');//第一个参数是个......
  • 基于JAVA SSM 实现【房屋租赁系统】(内附设计文档 + PPT+ 源码 下载)
    房屋租赁系统项目技术栈该项目采用了以下核心技术栈:后端框架/库:Java,ssm数据库:MySQL5.7前端技术:HTML,CSS,JavaScript服务器:Tomcat7开发工具:Eclipse/MyEclipse/IDEA,NavicatforMySQL项目展示5.1前台首页功能模块图5-1前台首页界面图首页展示了房源信息......
  • 不同操作系统中通用解决方案,浏览器拉起app或打开本机应用软件原理,前端网页如何打开一
    不同操作系统中通用解决方案,浏览器拉起app或打开本机应用软件原理,前端网页如何打开一个PC本地应用,通过Scheme、JavaScript、第三方库分别实现前端网页打开本地应用。设想一个场景,当我们在浏览一个网页并且需要下载某个资源时,你的电脑可能经常会跳出一个提示框,询问你是否需......
  • 【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询
    在PostgreSQL中,我们可以使用SELECTDISTINCT和SUBSTRING函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对resource_version字段的去重查询。1.SELECTDISTINCT语句SELECTDISTINCT语句用于从表中选择不重复的记录。如果没有指定列名,则会选择所有列。在......
  • 2024最新最全Java和Go面经,面试了30多场,终于上岸了!
    ​>本文来自我们技术交流群群友的投稿,未经授权,禁止转载。原文链接:太难了,Java和Go,面试了30多场,终于上岸了!先听一下TA的故事2023年10月份我就做好了离职跳槽的准备,做了3年Java后端开发的我,对自己的技术能力还是很有底气的。之前虽不是一线大厂,也算是比较知名的中厂了。加上前公......
  • 如何使用Java代码混淆技术保护您的应用程序
     摘要本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义。通过混淆技术,可以有效防止代码被反编译、逆向工程或恶意篡改,提高代码的安全性。常见的Java代码混淆工具如IPAGuard、Allatori、DashO、ZelixKlassMaster和yGuard等,为开发者提供了丰富的选择。本文将介......