两个对象, 一个对象是 位于字符串常量池中,一个对象是位于堆内存中。
字符串的创建方式:
new String("hello"); 如果字符串常量池中已经存在 ,就不会在字符串常量池中创建了 但在堆内存中依然会创建。
public class Demo1 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");//该方法String()可以接收一个字符串
String str4 = new String("hello");
System.out.println("str1==str2?"+(str1==str2)); // true
System.out.println("str2==str3?"+(str2==str3)); //false
System.out.println("str3==str4?"+(str3==str4)); // false
System.out.println("str3.equals(str2)?"+(str3.equals(str4))); //true
//是String类重写了Object的equals方法,比较的是两个字符串对象 的内容 是否一致。
// "=="用于比较 引用数据类型数据的时候比较的是两个对象 的内存地址,equals方法默认情况下比较也是两个对象 的内存地址。
test(null);
}
public static void test(String str){ //为了避免空指针异常,就用常量来作为euqals方法的调用者
if("中国".equals(str))
{
System.out.println("回答正确");
}else{
System.out.println("回答错误");
}
}
}
public class Demo2 {
public static void main(String[] args) {
String str = new String();
byte[] buf = {97,98,99};
str = new String(buf); //使用一个字节数组构建一个字符串对象
str = new String(buf,1,2); //使用一个字节数组构建一个字符串对象,指定开始解码 的索引值和解码的个数。
char[] arr = {'明','天','是','圣','诞'};
str = new String(arr); //使用字符数组构建一个字符串
str = new String(arr,3,2);
int[] buf2 = {65,66,67};
str = new String(buf2,0,3);
str = new String("abc");
System.out.println("字符串的内容:"+str);
}
}
public class Demo3 {
public static void main(String[] args) {
String str = "abc中国ab中国";
System.out.println("字符串的字符 个数: " + str.length() );
System.out.println("根据索引值获取对应 的字符:"+ str.charAt(3));
System.out.println("查找子串第一次出现的索引值:" + str.indexOf("中国"));
System.out.println("查找子串最后一次出现的索引值:" + str.lastIndexOf("中国"));
}
}
2.判断方法
boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0 如:“” null V1.6
boolean contains(CharSequences) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等
public class Demo4 {
public static void main(String[] args) {
String str = "Demo.java";
System.out.println("是否以指定 的字符串结束:"+ str.endsWith("ja"));
//str = "";
System.out.println("判断字符串是否为空内容:"+str.isEmpty());
System.out.println("判断字符串是否包含指定的内容:"+ str.contains("Demo"));
System.out.println("判断两个 字符串的内容是否一致:"+ "DEMO.JAVA".equals(str));
System.out.println("判断两个字符串的内容是否一致(忽略大小写比较):"+ "DEMO.JAVA".equalsIgnoreCase(str));
public class Demo4 {
public static void main(String[] args) {
String str = "Demo.java";
//转换的方法
char[] buf = str.toCharArray(); //把字符串转换字符数组
System.out.println("字符数组:"+ Arrays.toString(buf));
byte[] buf2 = str.getBytes(); //把字符串转字节数组
System.out.println("字节数组:"+ Arrays.toString(buf2));
}
}
public class Demo5 {
public static void main(String[] args) {
String str = "今天晚上不考试";
System.out.println("指定新内容替换旧 的内容:"+ str.replace("不", "要好好"));
str = "大家-下-午-好";
String[] arr = str.split("-"); //根据指定的字符进行切割 。
System.out.println("字符串数组的内容:"+ Arrays.toString(arr));
str = "广州传智播客";
System.out.println("指定开始的索引值截取子串:"+ str.substring(2));
System.out.println("指定开始的索引值截取子串:"+ str.substring(2,6)); //包头不包尾 注意:截取的内容是包括开始的索引值,不包括结束的索引值, 截取的位置是结束的索引值-1.
str = "abC中国";
System.out.println("转大写:" + str.toUpperCase());
str = "AbdfSDD";
System.out.println("转小写:"+ str.toLowerCase());
str = " 大家最近 都非常努力 ";
System.out.println("去除字符串首尾的空格:"+ str.trim());
}
}
public class Demo6 {
public static void main(String[] args) {
String str =" 传智 播客 ";
System.out.println(myTrim(str));
str = "D:\\20120512\\day12\\Demo1.java";
getFileName(str);
str = "新中国好";
System.out.println("翻转后的字符串:"+ reverse(str));
str = "abcjavaabcjavaphpjava"; //java
getCount(str, "java");
}
//统计子串出现 的次数
public static void getCount(String str,String target){
int count = 0 ; //用于记录出现的次数
int fromIndex = 0; // 记录从那个索引值开始寻找目标子串
while((fromIndex = str.indexOf(target, fromIndex))!=-1){
//如果indexof方法返回 的不是-1,那么就是已经找到了目标 元素。
count++;
fromIndex = fromIndex+target.length();
}
System.out.println("出现的次数:"+ count);
}
public static String reverse(String str){
char[] arr = str.toCharArray();
for(int startIndex = 0 , endIndex=arr.length-1 ; startIndex