String

导读:本篇文章讲解 String,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Java API 之 String(上)

1、声明

//声明方式
String s1 = "hello";

String s2 = new String("hello");
String s1="abc";
String s2="abc";
/*
首先会在字符串常量池中查找,若没有,就在常量池中创建
如果常量池中已经存在,就不需要创建,直接返回地址
*/
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true

== 和 equals 的区别

== : 比较两个变量的地址是否相等

equals(): 重写了Object类的equals(),比较两变量的内容(this.value)是否相等

String str1=new String("abcd");
String str2=new String("abcd");//虽然内容相同,并不是同一个对象
String str3=str1;//两变量表示同一个对象,指向同一个地址
System.out.println(str1==str2);//false
System.out.println(str1==str3);//true
System.out.println(str1.equals(str2));//true   equals比较对象的内容

2、使用String的注意事项

/*
所有字符串常量都是String类的实例(对象)
字符串不能更改,(一旦给定字符串的值,值就不能改变)因为底层用到一个final修饰的char数组
private final char value[];  底层是单个字符存储   char a=97 b=98 c=99
*/
String s="hello";
s+=" world";
s+=" !";

String s1=new String("HELLO");
s1+=" WORLD";
s1+=" !";//当更改字符串的值时,将会创建一个新的字符串对象 (存储更改后的值)
System.out.println(s);
System.out.println(s1);

输出:

hello world !
HELLO WORLD !

3、String的常用方法

构造方法
public String()
public String(String str)
public String(byte[] bytes)
public String(char[] value)
String的判断功能 作用
equals() 判断两个对象内容是否相等
equalsIgnoreCase() 判断两个对象内容是否相等,不区分大小写
contains() 判断是否包含指定字符串
isEmpty() 判断字符串长度是否为0
startswith() 判断是否以指定的字符串开头
endswith() 判断是否以指定的字符串结尾
String s1=new String("hello");
String s2="hello";
String s3=new String("HELLO");
String s4="";

System.out.println(s1.equals(s2));//判断两个对象内容是否相等
System.out.println(s1.equalsIgnoreCase(s3));//判断两个对象内容是否相等,不区分大小写
System.out.println(s1.contains("lo"));//判断是否包含指定字符串
System.out.println(s4.isEmpty());//判断字符串长度是否为0
System.out.println(s1.startsWith("he"));//判断是否以指定的字符串开头
System.out.println(s3.endsWith("LO"));//判断是否以指定的字符串结尾

运行结果:

true
true
true
true
true
true
String获取功能 作用
int length() 返回字符串长度,字符串底层用char型数组存储
char charAt(int index) 返回指定索引的字符
int indexOf(int ch) 返回指定字符首次出现的位置
int indexOf(int ch, int fromIndex) 从指定索引开始,返回指定字符首次出现的位置
int lastIndexOf(int ch) 返回指定字符在字符串中最后一次出现处的位置,如果此字符串中没有这样的字符,则返回 -1
String substring(int start) 截取指定区间内字符串, 从开始索引~s.length-1
String substring(int start,int end) 截取指定区间内字符串, 从开始索引~结束索引-1
String s1="hello world";

System.out.println(s1.length());//11
System.out.println(s1.indexOf('o'));//4
System.out.println(s1.indexOf('o',5));//7
System.out.println(s1.charAt(0));//h
System.out.println(s1.lastIndexOf('l'));//9


String s2=s1.substring(6);
String s3=s1.substring(3,9);
System.out.println(s2);//world
System.out.println(s3);//lo wor
String的转换功能 作用
String toLowerCase() 转大写
String toUpperCase() 转小写
String trim() 去掉字符串两边空格
String concat(String str) 连接两字符串,返回新对象
String[] split(String regex) 将字符串分割为给定的正则表达式匹配,返回一个数组
static String valueOf(char[] chs) 返回 char参数的字符串 char形式。
byte[] getBytes() 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。
byte[] getBytes(String charsetName) 使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中。
char[] toCharArray() 将此字符串转换为新的字符数组。

代码:

String s1="aBcDeFgH";
System.out.println(s1.toLowerCase());//转小写
System.out.println(s1.toUpperCase());//转大写
System.out.println(s1.concat(" + 123456"));//拼接两个字符串,返回一个新字符串(新对象)

String s2="2021:5:9.Hello.World";
String [] arr = s2.split(":");//用指定符号来分割字符串为数组
String [] arr1= s2.split("\\.");
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arr1));

运行结果:

abcdefgh
ABCDEFGH
aBcDeFgH + 123456
[2021, 5, 9.Hello.World]
[2021:5:9, Hello, World]

代码:

String s2 = "   3空格   ABC   3空格   ";
System.out.println(s2);
System.out.println(s2.trim());//去掉字符串两边空格

运行结果:

   3空格   ABC   3空格   
3空格   ABC   3空格

代码:

		/*
        public byte[] getBytes() {
            return StringCoding.encode(value, 0, value.length);
        }
        */
        String str = new String("Hello");
        byte [] b = str.getBytes();//编码
        System.out.println(Arrays.toString(b));//[72, 101, 108, 108, 111]

        String strNew = new String(b);//解码
        System.out.println(strNew);//Hello   
/*
	public byte[] getBytes(String charsetName)throws UnsupportedEncodingException {
        if (charsetName == null) throw new NullPointerException();
        return StringCoding.encode(charsetName, value, 0, value.length);
    }
*/
String str1 = "张三";
byte [] b1 = str1.getBytes("GBK");//编码
System.out.println(Arrays.toString(b1));//[-43, -59, -56, -3]GBK中1汉字占2字节
String s1 = new String(b1,"GBK" );//解码
System.out.println(s1);//张三
String str1New = new String(b1);//解码(平台默认使用UTF-8编码)  乱码
System.out.println(str1New);//输出����,编码时使用GBK,解码时,默认使用了UTF—8

运行结果:

[-43, -59, -56, -3]
张三
����

上述代码中输出有乱码,这是什么原因呢?

在编码时,我使用了GBK编码,

乱码问题:

编码与解码时使用的编码格式不统一

解决方法:

byte [] b = getBytes(“编码1”);

new String(b,“编码1”);

只有编码格式相统一时,才能正常解码

String str1 = "张三";
byte [] b1 = str1.getBytes("GBK");//编码
String str2 = new String(b1,2,2,"GBK");//从第offset个字节开始,到第offset+length个字节结束
System.out.println("截取后:"+str2);

运行结果:

截取后:三

代码:

String str3 = new String("dcba");
System.out.println(str3);//dcba
char[] chars = str3.toCharArray();//将字符串转为字符数组
Arrays.sort(chars);//排序
System.out.println(Arrays.toString(chars));//[a, b, c, d]
System.out.println(chars);//abcd
	/*
       public String(char value[]) {
          this.value = Arrays.copyOf(value, value.length);
        }
      */
System.out.println("=================");

String str3New = new String(chars);//字符数组转为字符串
/*
	public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }
*/
System.out.println("char[]转字符串:"+str3New);
String str4 = String.valueOf(chars);//字符数组转为字符串,返回新对象
/*
	public static String valueOf(char data[]) {
        return new String(data);
    }
*/
System.out.println(str4);

运行结果:

dcba
[a, b, c, d]
abcd
=================
char[]转字符串:abcd
abcd

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15650.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!