Java教程

JAVA--String

本文主要是介绍JAVA--String,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

String
1.概念
是一个最终类,没有子类 、所有的字符串常量都是String类的对象 String创建完之后不能改变,底层是由不可改变的字符数组实现的如果常量池中已有字符串常量,后续出现的字符串常量重复了就用前面的—共享
所有的常量都要存储在常量池中,其他类型的常量直接存储的是常量值,字符串常量存储的指向字符数组的地址值

2、比较+和StringBuilder拼接效率
(1)空间(在空间的维度上StringBuilder更优)

String[] ss={…….};//100个 
1.用+拼接 
String str="";//1
for(int i=0;i<ss.length;i++){ 
str+=ss[i];//new 
StringBuilder(str).append(ss[i]).toString();//一次循 
环创建3个对象 100次---300个对象
} 
一共创建了301个对象
2.用StringBuilder进行拼接 
StringBuilder sb=new StringBuilder();//1 
for(int i=0;i<ss.length;i++){ 
sb.append(ss[i]);//一次循环创建1个对象 100次--100个 
} 
String str=sb.toString();//1 
一共创建102个对象

(2)时间(从时间维度StringBuilder更优)
综上所述:在进行大量数据拼接选择StringBuilder
StringBuilder是线程不安全,但是效率高(jdk1.5)
StringBuffer是线程安全,但是效率低(jdk1.0)

3、重要方法
charAt()—根据字符串的下标返回指定的字符
length()—返回字符串长度值
toCharArray()—把一个字符串全部信息转成一个字符数组
new String(char[] cs)—可以把字符数组部分信息转成一个新的字符串对象
compareTo()—返回的是两个字符串对象字典排序的差值(对应位置的字符的差值,如果差值一直为0直到一个字符串遍历结束返回的就是长度的差值)
concat()—把新字符串拼接到原字符串的末尾生成一个新字符串进行返回
contains()—判断新串是否是原串的子串
startsWith()/endsWith()—判断原串是否以指定的新串进行开头或者结尾
equals()—重写Object的 比较地址值是否相等如果不相等再比较内容是否一致
getBytes()—可以根据指定的码表来返回一个字节数组或者不指定码表就按默认系统平台码来进行编码返回一个字节数组new
String(byte[] bs,int offeset,int length)—把部分字节数组可以按照指定的码表进行转换成新的新的字符串对象如果不指定就按默认系统平台码进行转换

public static void main(String[] args) throws UnsupportedEncodingException { 
//字符串 
String str="字符串"; 
//没有指定具体的码表就按默认的系统平台码来编码(GBK) 
byte[] bs=str.getBytes("utf-8"); 
//System.out.println(bs.length); 
//字节数组转成一个新的字符串对象,不指定转换编码就是默认系 
统平台码 
//String s=new String(bs,"utf-8"); 
//转换字节数组的部分信息为新的字符串对象 
String s=new String(bs,0,7,"utf-8"); 
System.out.println(s); 
}

hashcode()—返回的是字符串对象的哈希码值,重写这个 hashcode方法根据字符串元素内容以及顺序来算的

/*//字符串
String str1="bac"; 
String str2=new String("abc"); 
//重写hashcode根据字符串的元素顺序来算的哈希码值 
System.out.println(str1.hashCode()); 
System.out.println(str2.hashCode());*/

indexOf()—返回指定新串在原串第一次出现的下标值,如果没有出现就返回-1

/*String str="wegwf43evwf43w";
//返回新串在原串中第一次出现下标值(新串第一个字符出现的下 
标) 
//如果不是原串的子串就会返回一个-1 
//System.out.println(str.indexOf("f43"));
//包含起始下标往后查找第一次出现
System.out.println(str.indexOf("f43",4));*/ 

intern()—把字符串对象的引用转向到常量池

/*String str1="abc";
String str2=new String("abc"); 
//把指向堆内存的引用转向到常量池中
str2=str2.intern(); 
//str1=str1.intern(); 
System.out.println(str1==str2);*/

isEmpty()—判断是否是空串

//String str="";//内存有空间但是没有元素--空
//String str=null;//内存空间没有开辟 
//空串 
String str=new String(); 
//判断字符串对象是否是空串 
System.out.println(str.isEmpty());

replace()—把原串中出现的所有指定字符换成新字符返回这样的新字符串

/*//字符串
String str="qewrhgfwqdfq"; 
//把原串中所有的指定字符替换成新字符返回一个新字符串 
System.out.println(str.replace("q", "+")); 
System.out.println(str);*/

subString()—按照给定的下标范围进行截取子串,把这个子串进行返回

String str="Wsdhcedus";
//给定起始下标,从下标开始往后截取成一个新字符串进行返回 
//System.out.println(str.substring(7)); 
//从起始下标开始截取,截取结束下标减去起始下标的个数 
//左包(包含)右不包 
//System.out.println(str.substring(2, 7)); 
//全部变大写 
System.out.println(str.toUpperCase()); 
//全部变小写 
System.out.println(str.toLowerCase()); 

trim()—对前面以及尾部的空格进行删除但是不针对中间出现

/*//字符串
String str=" eruhgu\terdv "; 
//
System.out.println(str+"a"); 
//对字符串的前面或者尾部出现的空格进行删除---掐头去尾 
System.out.println(str.trim()+"a");*/

valueOf()—静态方法 可以把所有的数据类型的数据转成新字符串返回

//把布尔类型数据转成新的字符串 
String s1=String.valueOf(true); 
//把整型值转成新的字符串 
String s2=String.valueOf(1);
// 
int[] arr={2,3,4}; 
char[] cs={'2','6','8'}; 
//输出的是数组内存地址值 通过底层的ValueOf方法转成字符串 
System.out.println(arr); 
//在底层没有转成字符串直接输出的就是数组元素 
System.out.println(cs.toString());
这篇关于JAVA--String的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!