java常用类--String
java基础
jdk,jre,jvm的关系
JDK包含JRE,JRE包含JVM.
常用类
String
String的特性
-
String类:代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
-
String是一个final类,代表不可变的字符序列。
-
字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
-
String对象的字符内容是存储在一个字符数组value[]中的。
String的定义方式
String s1 = "abc";//字面量的定义方式,数据存放在方法区字符常量池
//本质上this.value = new char[0];
String s1 = new String();
//this.value = original.value;
String s2 = new String(String original);
//this.value = Arrays.copyOf(value, value.length);
String s3 = new String(char[] a);
//Tom存放于字符常量池中
Person p1 = new Person("Tom",12);
Person p2 = new Person("Tom",12);
System.out.println(p1.name == p2.name);//true
-
字符串常量存储在字符串常量池,目的是共享
-
字符串非常量对象存储在堆中
String的转换
-
字符串--》基本类型 parseInt(String s)
-
基本类型--》字符串 String.valueOf(int n)
-
字符串--》字符数组 toCharArray()
-
字符数组--》字符串 构造器 new String(char[])
-
字符串--》字节数组 getBytes()
-
字节数组--》字符串 构造器 new String(byte[])
String常见笔试题
String s1 = "hello";
String s2 ="world";
String s3 = "hello" + "world";
String s4 = s1 + "world";
String s5 = "hello" + s2;
String s6 = (s1 + s2).intern();
System.out.println(s3 == s4);//false
System.out.println(s3 == s5);//false
System.out.println(s4 == s5);//false
System.out.println(s3 == s6);//true
- 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量
- 只要其中有一个是变量,结果就在堆中
- 如果拼接的结果调用intern()方法,返回值就在常量池中
public class StringTest {
//str存放在了堆中
String str = new String("good");
//ch存放在了堆中
char[] ch = { 't', 'e', 's', 't' };
//值传递,地址不可改变
public void change(String str, char ch[]) {
//str存放在了常量池,局部变量
str = "test ok";
//ch堆中的值变了
ch[0] = 'b';
}
public static void main(String[] args) {
StringTest ex = new StringTest();
ex.change(ex.str, ex.ch);
System.out.print(ex.str);//good
System.out.println(ex.ch);//best
}
}
String的常用方法
- int length():返回字符串的长度: return value.length
- char charAt(int index): 返回某索引处的字符return value[index]
- boolean isEmpty():判断是否是空字符串:return value.length == 0
- String toLowerCase() 使用默认语言环境,将 String 中的所有字符转换为小写
- String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写
- String trim():返回字符串的副本,忽略前导空白和尾部空白
- boolean equals(Object obj):比较字符串的内容是否相同
- boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
- String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
- int compareTo(String anotherString):比较两个字符串的大小
- String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
- String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
############################################
- boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
- boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
- boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
- boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true
- int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
- int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
- int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
- int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
- 注:indexOf和lastIndexOf方法如果未找到都是返回-1
#########################################
-
String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
-
String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
-
String replaceAll(String regex, String replacement) : 使 用 给 定 的replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
-
String replaceFirst(String regex, String replacement) : 使 用 给 定 的replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
-
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
-
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
-
String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中
String 常见算法题
//模拟一个trim方法,去除字符串两端的空格。
public String myTrim(String value) {
if (value!= null) {
int len = value.length;
int st = 0;
char[] val = value.toCharArray(); /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : value;
}
/**
* 反转一个字符串指定部分,比如"abcdef",反转为"aedcbf"
*/
@Test
public void reverse(){
String str = "abcdef";
char[] chars = str.toCharArray();
for(int start = 1,end = 4;start < end;start++,end--){
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
}
String reverseStr = new String(chars);
System.out.println(reverseStr);
}
/**
* 获取一个字符串在另一个字符串中出现的次数
*
*/
public static int getCount(String str1,String str2){
int count=0;
int index=str1.indexOf(str2);
while (index!=-1){
count++;
index=index+str2.length();
index=str1.indexOf(str2,index);
}
System.out.println(count);
return count;
}