Java学习笔记Day11:String类

String赋值方法

  • String str=“fsdf” 直接赋值构造字符串

  • String str2=new String(“fdjs”);

  • char[] array={‘a’,‘b’,‘c’};

    String str3=new String(array);

"fsdf"放到堆里的常量池,常量池里的字符串只存在一份

String str="abcdef";
String str1="abc"+"def";System.out.println(str==str1);
//true,在编译时已经进行拼接了
String str="abcdef";
String str2="abc"+new String("def");
System.out.println(str==str2);
//false,构造方法在运行时调用
String str1="abc";
String str2="def";
String str3=str1+str2;
String str="abcdef";
System.out.println(str==str3);//false
int a=360;
String str="abc"+"def"+a;
//产生两个对象,会调用StringBuilder类的append方法

equals方法

  • String类已经重写了Object中的equals方法
  • str.equals(str2):是用来比较str1变量本身所占内存的值所指向的对象和str2变量本身所占内存的值所指向的对象内容是否相同
  • String类的equals方法是用来判断两个对象的内容是否相等,Object类的equals方法是用来判断两个对象是否是同一个对象;

如果希望不同内存但内容相同的两个对象equals时返回true,则我们需要重写父类的equals方法,如下

class A{
    int i;
    public A(int i){
        this.i=i;
    }

    public boolean equals(Object obj){
        A aa=(A)obj;
        if(this.i==obj.i){
           return true;
        }else{
            return false;
        }
    }
}

字符串比较大小方法

str.compareTo(str1);

intern方法

  • 常量池当中存在返回常量池当中字符串对象的地址
  • 常量池当中不存在,那么在常量池当中生成该对象的
String str=new String("hello").intern();
String str1="hello";
System.out.println(str==str1);//true;

反射-》Java的自省

String str="hello";
Class clc=String.class;
// 获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的. 
Field valueField = String.class.getDeclaredField("value"); 
// 将这个字段的访问属性设为 
true valueField.setAccessible(true); 
// 把 str 中的 value 属性获取到. 
char[] value = (char[]) valueField.get(str); 
// 修改 value 的值 value[0] = 'h'; 
System.out.println(str);

String类常用方法:

  • public char charAt(int index):返回字符串中第index个字符
  • public int length():返回字符串的长度
  • public int indexOf(String str):返回字符串中出现str的第一个位置
  • public int indexOf(String str,int
    fromIndex):返回字符串中从fromIndex开始出现str的第一个位置
  • public boolean equalsIgnoreCase(String
    another):比较字符串是否与another是否一样(忽略大小写)
  • public String replace(char oldChar,char
    newChar):在字符串中用newChar字符替换oldChar字符
  • public String toUpperCase():返回一个字符串为该字符串的大写形式
  • public String toLowerCase():返回一个字符串为该字符串的小写形式
  • public String[] split(String regex)
    public Stirng[] split(Stirng regex,int limit)
    注意事项:
  1. 字符"|","*","+“都得加上转义字符,前面加上”".
  2. 而如果是"",那么就得写成"\".
  3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

查找关键字ctrl+f键

String类静态重载方法:

  • public static String valueOf(double d):可以将基本数据类型转换为字符串
  • public Strin[] split(String regex):可以将一个字符串按照指定的分隔符分隔,返回分隔后的字符串数组

练习题:

1、统计一个String对象中大写字母、小写字母、非字母各自出现的个数

class A{
    public static void main(String[] args){
        String str="asFDSdfs!12";
        int cntU=0;
        int cntL=0;
        int cntOther=0;
        int i;
        for(i=0;i<str.length();i++){
            char ch=str.charAt(i);
            if(Character.isUpperCase(ch)){
                cntU++;
            }else if(Character.isLowerCase(ch)){
                cntL++;
            }else{
                cotOter++;
            }
    }
}

2、统计一个字符串在另一个字符串中出现的次数

public class A{
    public static void main(String[] args){
        String str1="abcasdabcabc";
        String str2="abc";
        int index=-1;
        int cnt=0;
        index=str1.indexOf(str2);
        while(-1!=index){
            cnt++;
            index=str1.index(str2,index+str2.length());
        }
        System.out.println(cnt);
    }
}

十六进制表示:Integer.toHexString(m).toUpperCase()

字符串和字符数组的转换

  • public String(char value[])

  • public String(char value[],int offset,int count)

  • public char charAt(int index)

  • public char[] toCharArray()

字节与字符串的转换

  • public String(byte bytes[])

  • public String(byte bytes[],int offset,int length)

  • public byte[] getBytes()

  • public byte[] getBytes()(String charsetName) throws
    UnsupportedEncodingException

发布了67 篇原创文章 · 获赞 12 · 访问量 1513

猜你喜欢

转载自blog.csdn.net/qq_42174669/article/details/102923883