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)
注意事项:
- 字符"|","*","+“都得加上转义字符,前面加上”".
- 而如果是"",那么就得写成"\".
- 如果一个字符串中有多个分隔符,可以用"|"作为连字符
查找关键字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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/87181.html