Java中的字符串

java.lang.String类表示字符串类,Java程序中所有字符串文字都可以看作实现该类的实例。

特点:

  1. 字符串不可变:字符串的值在创建后不能在发生改变

    public class Dome001_String {
    public static void main(String[] args) {
    String s1 = "abc";
    String s2 = s1 + "d";
    System.out.println(s1 == s2); // false
    }
    }

    通过上述代码的输出结果,我们可以发现,执行s1 + "d"时,不是在"abc"字符串后面加一个"d"(因为"abc"被创建之后值就不能再被改变),而是创建了一个新的字符串"abcd"并赋值给了s2

  2. 正是String对象不可变,所以它们可以被共享

    public class Dome001_String {
    public static void main(String[] args) {
    String s1 = "asdf";
    String s2 = "asdf"; System.out.println(s1 == s2); // true 对于引用类型,==比较的是内存地址
    }
    }

    "asdf"s1s2共享。

  3. 关于底层实现:jdk1.8及以前String使用的是char数组,jdk1.9及以后使用的是byte数组。

构造方法

  • public String(): 初始化新创建的字符串对象,使其表示空字符序列。没有必要使用这个构造函数,因为字符串是不可变的。
  • public String(original)
  • public String(char[] value)
  • public String(byte[] bytes)
public class Dome001_String {
public static void main(String[] args) {
String s3 = new String("abc");
System.out.println(s3); // abc byte[] bytes = {97, 98, 99};
char[] value = {'a', 'b', 'c'};
String s1 = new String(bytes);
String s2 = new String(value);
System.out.println(s1);
System.out.println(s2);
}
}
  • public String(byte bytes[], int offset, int length)
  • public String(char value[], int offset, int count)
public class Dome001_String {
public static void main(String[] args) {
byte[] bytes = {97, 98, 99, 100, 101, 102, 103, 104, 105, 106};
char[] value = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k'}; String s1 = new String(bytes, 2, 5); // 从索引2开始的连续的5个元素构成的字符串
System.out.println(s1); // cdefg
String s2 = new String(value, 5, 3); // 从索引5开始的连续的3个元素构成的字符串
System.out.println(s2); // fgh
}
}

常用方法

  • public boolean equals(Object anObject):判断字符串内容是否相等
  • public boolean equalsIgnoreCase(String anotherString):忽略大小写判断字符串内容是否相等
public class Dome001_String {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = "HELlo"; System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false
System.out.println(s1.equalsIgnoreCase(s3)); // true
}
}
  • public int length():public int length():获取字符串当中含有的字符个数,拿到字符串长度。
  • public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。
  • public char charAt(int index):获取指定索引位置的单个字符(索引从0开始)
  • public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
  • public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。
  • public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串。
public class Dome001_String {
public static void main(String[] args) {
// 获取字符串的长度
int length = "ueyvb".length();
System.out.println(length); // 5 // 拼接字符串
String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(str2);
System.out.println(str1); // Hello,原封不动
System.out.println(str2); // World,原封不动
System.out.println(str3); // HelloWorld,新的字符串 // 获取指定索引位置的单个字符
char ch = "Hello".charAt(1);
System.out.println(ch); // e // 查找参数字符串在本来字符串当中出现的第一次索引位置
String original = "HelloWorldHelloWorld";
int index = original.indexOf("llo");
System.out.println(index); // 2
// 如果根本没有,返回-1值
System.out.println(original.indexOf("abc")); // -1 // 截取字符串
String str4 = "HelloWorld";
String str5 = str4.substring(5);
System.out.println(str4); // HelloWorld,原封不动
System.out.println(str5); // World,新字符串 String str6 = str4.substring(2, 7); // 从索引2开始一直截取到索引7(不包含索引7)
System.out.println(str6); // lloWo
}
}
  • public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。

  • public byte[] getBytes():获得当前字符串底层的字节数组。

  • public String replace(CharSequence oldString, CharSequence newString):将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。

    CharSequence是一个接口,也是一种引用类型。作为参数类型,可以把String对象传递到方法中。

public class Dome001_String {
public static void main(String[] args) {
// 转换成为字符数组
char[] chars = "Hello".toCharArray();
System.out.println(Arrays.toString(chars)); // [H, e, l, l, o] // 转换成为字节数组
byte[] bytes = "abc".getBytes();
System.out.println(Arrays.toString(bytes)); // [97, 98, 99] // 字符串的内容替换
String str1 = "How do you do?";
String str2 = str1.replace("o", "*");
System.out.println(str1); // How do you do?
System.out.println(str2); // H*w d* y*u d*?
}
}
  • public String[] split(String regex):按照给定的正则表达式规则,将字符串切分成为若干部分。
import java.util.Arrays;

public class Dome001_String {
public static void main(String[] args) {
String str1 = "aaa,bbb,ccc";
String[] array1 = str1.split(",");
System.out.println(Arrays.toString(array1)); // [aaa, bbb, ccc] String str3 = "XXX.YYY.ZZZ";
String[] array3 = str3.split("\\."); // “.”是正则表达式中的元字符,如果想以元字符分割的话需要加上转义符号“\\”
System.out.println(Arrays.toString(array3)); // [XXX, YYY, ZZZ] String str4 = "1a111a1aa11aaa11";
String[] array4 = str4.split("1+");
System.out.println(Arrays.toString(array4)); // [, a, a, aa, aaa]
// 除此之外,我们还发现,str4的第一个元素1就跟regex匹配了,所以array4中第一个字符串是""
// 而str4结尾是11,同样跟regex匹配,但是array4最后并没有一个元素为""
}
}

『Java』String类使用方法的更多相关文章

  1. 『Java』StringBuilder类使用方法

    String类存在的问题 String类的底层是一个被final修饰的byte[],不能改变. 为了解决以上问题,可以使用java.lang.StringBuilder类. StringBuilder ...

  2. Java中String类的方法及说明

    String : 字符串类型 一.      String sc_sub = new String(c,3,2);    //      String sb_copy = new String(sb) ...

  3. 深入分析Java的String类的方法与特点

    字符串是任何编程语言都必须支持的变量类型,有些编程语言是直接提供了原生的变量类型,有些编程语言则使用语法特性以 SDK 的形式提供支持.在Java编程平台中,对字符串的支持使用了后者的形式,就是通过在 ...

  4. 【转载】Java中String类的方法及说明

    转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.      String sc_ ...

  5. 『Java』接口的使用方法

    以下三个文件存在于同一个包下: 定义接口Dome_Interface.java: package cn.xxmmqg.Interface; // 接口不能直接使用,必须有一个"实现类&quo ...

  6. JAVA中String类的方法(函数)总结--JAVA基础

    1.concat()方法,当参数为两字符串时,可实现字符串的连接: package cn.nxl123.www; public class Test { public static void main ...

  7. java.lang.String 类的所有方法

    java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...

  8. 《java入门第一季》之类(String类常见方法小叙)

    String类下面的构造方法和一些常见的方法: /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,可以知道 * A:字符串字面值"abc&quo ...

  9. paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型

    paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...

随机推荐

  1. Linux:Linux操作防火墙命令

    首先查看Linux的防火墙是否关闭 firewall-cmd Linux上新用的防火墙软件,跟iptables差不多的工具. firewall-cmd --state # 显示防火墙状态 system ...

  2. java实现遍历文件目录,根据文件最后的修改时间排序,并将文件全路径存入List集合

    package com.ultra.aliyun.control.main; import java.io.File; import java.util.ArrayList; import java. ...

  3. spring boot.2x 集成swagger 加入拦截器后 swagger不能访问

    忽略掉 swagger-resources下面的请求 以及忽略掉 v2下面的请求即可 转自:https://blog.csdn.net/hanwenyi520/article/details/7989 ...

  4. 16 shell select in 循环

    select in 是 Shell 独有的一种循环,适用于与终端(Terminal)进行交互,在其他编程语言中是没有的. 用法 说明 脚本 select var in val_listdo    st ...

  5. linux 之管道命令与重定向

    一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...

  6. 通过MMIO的方式实现VIRTIO-BLK设备(一)

    背景知识 什么是VIRTIO 使用完全虚拟化,Guest不加任何修改就可以运行在任何VMM上,VMM对于Guest是完全透明的.但每次I/O都将导致CPU在Guest模式与Host模式间切换,在I/O ...

  7. Java和C#语法对比(转)

        Java C# 访问修饰符 public 修饰类.接口.变量.方法. 对所有类可见. 修饰类.接口.变量.方法. 对所有类可见.   internal 无. 修饰类.接口.变量.方法. 类,接 ...

  8. 「CF516D」 Drazil and Morning Exercise

    「CF516D」 Drazil and Morning Exercise 传送门 这个 \(f_i\) 显然可以通过树形 \(\texttt{DP}\) 直接求. 然后看到这种差值问题感觉就可以二分转 ...

  9. webpack 快速入门 系列 —— 性能

    其他章节请看: webpack 快速入门 系列 性能 本篇主要介绍 webpack 中的一些常用性能,包括热模块替换.source map.oneOf.缓存.tree shaking.代码分割.懒加载 ...

  10. Scala学习——基础入门

    基础语法 1)注意点 1)区分大小写 -  Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 2)类名 - 对于所有的类名的第一个字母要大写. 3)方法名 ...