zoukankan      html  css  js  c++  java
  • String类

    2.1 字符串类型概述
    又爱又恨!!!
    	爱:
    		字符串基本上就是数据的保存,传输,处理非常重要的一种手段。
    	恨:
    		解析过程非常烦人,需要掌握熟记很多方法,同时需要有一定的技巧和灵性
    
    	String字符串类型是Java中引用数据类型,并且String类型是使用final修饰,没有自己的子类。
    
    字符串的存储也是非常个性的一件事情,分两种情况,
    	一种是在内存的数据区
    	一种是在内存的堆区
    
    字符串是一个常量!!!
    	字符串确定之后无法修改!!!
    
    2.2 字符串内存分析和equals方法*
    package com.qfedu.b_string;
    
    /*
     * 字符串常量分析
     */
    public class Demo1 {
    	public static void main(String[] args) {
    		String str1 = "烤羊排";
    		String str2 = "烤羊排";
    		String str3 = new String("烤羊排");
    		String str4 = new String(str1);
    		
    		/*
    		 * tfff
    		 * == 等于判断是比较两个变量中保存的数据是否一致
    		 * String str1 str2 str3 str4 都是引用数据类型的变量,也就是==判断比较的是
    		 * str1 ~ str4 中保存的空间首地址
    		 */
    		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("str4 == str1 : " + (str4 == str1)); // false 
    		
    		System.out.println("----------------------------------------");
    		/*
    		 * 字符串如何比较是否一致???
    		 * 
    		 * Java中规定,字符串比较要求采用equals方法来完成,并且使用的equals方法是String类
    		 * 重写Object类内的方法,比较方式是比较字符串内容。
    		 */
    		System.out.println("str1.equals(str2) : " + str1.equals(str2)); // true
    		System.out.println("str2.equals(str3) : " + str2.equals(str3)); // true
    		System.out.println("str3.equals(str4) : " + str3.equals(str4)); // true
    		System.out.println("str4.equals(str1) : " + str4.equals(str1)); // true
    		
    	}
    }
    

    4201ede24b48ebd1421d5e7214dad29a.png

    2.3 获取方法
    int length();  
    	获取字符串的长度
    char charAt(int index); 
    	从字符串中获取对应下标位置的字符,(存在下标越界问题)
            
    int indexOf(char ch); 
    	找出指定字符在当前字符串中的下标位置
        "ABCDEFGABCDEFG"
        查询 'E' ==> result 4
            
    int indexOf(String str); 
    	找出指定字符串在当前字符串中的下标位置
        "ABCDEFGABCDEFG"
        查询 "DE" ==> result 3
    
    int lastIndexOf(char ch); 
    	找出指定字符最后一次出现的下标位置
        "ABCDABCD";
    	查询 'B' ==> result 5
            
    int lastIndexOf(String str); 
    	找出指定字符串最后一次出现的下标位置
        "ABCDABCD";
    	查询 "CD" ==> result 6
    
    package com.qfedu.b.string;
    
    /**
     * 字符串常量
     * 
     * @author GGGXXC
     *
     */
    public class Demo1 {
    
    	public static void main(String[] args) {
    		String str1 = "烤羊排";
    		String str2 = "烤羊排";
    		String str3 = new String("烤羊排");
    		String str4 = new String(str1);
    		
    		/**
    		 * == 是判断两个变量中保存的数据是否一致,String是引用类型,其中存的是地址数据
    		 * String str1 str2 str3 str4 中存的都是引用类型数据,== 判断的是四个变量中
    		 * 存储的地址
    		 * 
    		 * 
    		 * 双引号中的内容为【字符串常量】,而且在整个代码运行期间,相同内容的字符串常量有且只有一个,都在内存的数据区
    		 * new String 的方法是在堆区创建空间,保存对应的字符串信息,并将该地址赋给引用数据类型变量
    		 */
    		
    		System.out.println("str1 == str2 : " + (str1 == str2)); //true
    		/*
    		 * 此处不可写成("str2 == str3 : " + str2 == str3);
    		 * 丢失括号将会使先让字符串和str2相连,再个str3进行比较
    		 */System.out.println("str2 == str3 : " + (str2 == str3)); //false;
    		System.out.println("str3 == str4 : " + (str3 == str4)); //false;
    		System.out.println("str4 == str1 : " + (str4 == str1)); //false;
    		
    		
    		
    		System.out.println("-------------------------------------");
    		
    		
    		/**
    		 * 字符串怎样比较内容是否一致?
    		 * Java中规定,字符串常量的比较要用equals进行比较,并且使用的equals方法是String类重写的Object类的
    		 * 方法,比较方式是比较字符串内容。
    		 * 
    		 * Object的 equals比较的是两个对象的地址是否一致
    		 * String类型重写了Object的equals方法
    		 * 
    		 * 【??重点标记】
    		 */
    		System.out.println("str1.equals(str2): " + str1.equals(str2));
    		System.out.println("str2.equals(str3): " + str2.equals(str3));
    		System.out.println("str3.equals(str4): " + str3.equals(str4));
    		System.out.println("str4.equals(str1): " + str4.equals(str1));
    	}
    }
    
    
    2.4 判断方法
    boolean endsWith(String str);
    	判断当前字符串是不是指定字符串结尾,如果是返回true,不是返回false
            
    boolean startsWith(String str);
    	判断当前字符串是不是指定字符串开始,如果是返回true,不是返回false
            
    boolean isEmpty();
    	判断当前字符串是否为空,空字符串是指 "" 双引号什么都没有
            
    boolean contains(String str) 是否包含指定序列 应用:搜索
        判断该指定字符串是否是当前字符串的子字符串。
        当前字符串:
    		"ABCDEFG";
        参数字符串:
    		"CDE"; ==> result true;
    	参数字符串:
    		"CE"; ==> result false
        原码是调用String类的indexOf方法,找出指定字符串的下标位置,indexOf方法下标为大于等于0,返回 true,否则返回 false
                
    boolean equals(Object anObject);
    	重写 Override Object类内方法,判断两个字符串是否一致。
            
    boolean equalsIgnoreCase(String anotherString);
    	忽略大小写是否相等,不考虑英文大小写方式比较两个字符串是否一致。     
    
    package com.qfedu.b_string;
    
    /*
     * 判断方法
     */
    public class Demo3 {
    	public static void main(String[] args) {
    		String str = "ABCDEFGABCDEFG";
    		
    		// endsWith方法
    		System.out.println("str.endsWith("FG") : " + str.endsWith("FG"));
    		System.out.println("str.endsWith("FG") : " + str.endsWith("GF"));
    		
    		// startsWith方法
    		System.out.println("str.startsWith("AB") : " + str.startsWith("AB"));
    		System.out.println("str.startsWith("BA") : " + str.startsWith("BA"));
    		
    		// isEmpty方法
    		System.out.println("str.isEmpty() : " + str.isEmpty());
    		System.out.println(""".isEmpty() : " + "".isEmpty());
    		
    		// contains方法
    		System.out.println("str.contains("ABCD") : " + str.contains("ABCD"));
    		System.out.println("str.contains("ACBD") : " + str.contains("ACBD"));
    		
    		// equalsIgnoreCase方法
    		System.out.println("ABCDEFG".equalsIgnoreCase("AbcdEfg"));
    	}
    }
    
    2.5 转换方法
    new String(char[] value);
    	将字符数组转换为字符串
            
    new String(char[] value, int offset, int count);
    	将字符数组转换为字符串,从指定offset位置开始,计数count
            offset是开始位置
            count是截取个数
        例如:
    		char[] arr = {'A', 'B', 'C', 'D', 'E'};
    	调用方法参数:
    		new String(arr, 2, 3); ==> result "CDE"
                
    static String valueOf(char[] data);
    	同理String(char[] value);
    	tips: 底层代码是 return new String(data);
            
    static String valueOf(char[] data, int offset, int count);
    	同理String(char[] value, int offset, int count);
    	tips: 底层代码是 return new String(data, offset, count);
    
    char[] toCharArray();
    	将字符串转换为字符数组
        例如:
    		"ABCDE";
    	返回值:
    		{'A', 'B', 'C', 'D', 'E'};
    
    package com.qfedu.b_string;
    
    /*
     * 转换方法
     */
    public class Demo4 {
    	public static void main(String[] args) {
    		char[] arr = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
    		
    		String str = new String(arr);
    		System.out.println(str);
    		
    		String str2 = new String(arr, 3, 3);
    		System.out.println(str2);
    		
    		String str3 = String.valueOf(arr);
    		System.out.println(str3);
    		
    		String str4 = String.valueOf(arr, 3, 3);
    		System.out.println(str4);
    		
    		char[] charArray = "你好,这里是骚磊电台".toCharArray();
    		for (int i = 0; i < charArray.length; i++) {
    			System.out.println(charArray[i]);
    		}
    	}
    }
    
    2.6 其他方法
    String replace(char oldChar, char newChar); 
    	替换使用newChar字符类型,替换当前字符串内的所有指定字符oldChar
        例如:
    		"ABCDEABCDE";
    	调用方法:
    		"ABCDEABCDE".replace('A', '你');
    	返回值结果:
    		"你BCDE你BCDE"; 【注】原字符串不变
                
    String[] split(String regex); 【重点】
    	【重点】切割,将当前字符串按照指定字符串切割成String类型数组
        例如:
    		String str = "你好!他好!大家好!广州好迪";
    	调用方法:
    		str.split("!");
    	返回值结果:
    		String[] arr = {"你好", "他好", "大家好", "广州好迪"};
    	调用方法:
    		str.split("好");
    	返回值结果:
    		String[] arr = {"你", "!他", "!大家","!广州", "迪"};
    
    String substring(int beginIndex); 【重点】
    	从指定beginIndex开始,到字符串结尾截取字符串
        例如:	
    		String str = "ABCDEFG";
    	调用方法:
    		str.substring(3);
    	返回值结果:
    		"DEFG"
    String substring(int beginIndex, int endIndex); 【重点】
    	从指定beginIndex开始,到endIndex结束,截取字符串
        要头不要尾 beginIndex <= 结果范围 < endIndex [3,5)
                                         
        例如:	
    		String str = "ABCDEFG";
    	调用方法:
    		str.substring(3, 5);
    	返回值结果:
    		"DE"
                                             
    String toUpperCase();
    	字符串中所有的英文字母转大写,返回新字符串
    String toLowerCase(); 
    	字符串中所有的英文字母转小写,返回新字符串                               
    String trim(); 
    	去除字符串两边的空格                                  
    
    package com.qfedu.b_string;
    
    import java.util.Arrays;
    
    /*
     * 其他方法
     */
    public class Demo5 {
    	public static void main(String[] args) {
    		String str = "ABCDEFGABCDEFG";
    		String replace = str.replace('A', '你');
    		
    		System.out.println(str);
    		System.out.println(replace);
    		
    		String str1 = "你好,他好,大家好,广州好迪";
    		String[] split = str1.split(",");
    		// Arrays数据工具类的toString方法,数组中的元素会使用, 分割
    		System.out.println(Arrays.toString(split));
    		for (int i = 0; i < split.length; i++) {
    			System.out.println(split[i]);
    		}
    		
    		String substring = str.substring(5);
    		System.out.println(substring);
    		
    		String substring2 = str.substring(5, 9);
    		System.out.println(substring2);
    		
    		System.out.println("abc,,,d浩爷EFG".toUpperCase());
    		System.out.println("AB!!!!C浩爷Defg".toLowerCase());
    		
    		System.out.println();
    		
    		String str2 = "                             fdafdsaf         fedadfs                   ";
    		System.out.println(str2);
    		System.out.println(str2.trim());
    	}
    }
    
    String与StringBuilder和StringBuffer的对比
    String的内容一旦被创建,内容不能被修改
    
    StringBuffer,可以修改字符串的内容,但是它要保证线程安全,在多线程中而且字符串的内容需要频繁修改,可以考虑使用该类
    
    StringBuilder,可以修改字符串的内容,它并不保证线程安全,在单线程中,该类的效率是最高的 
    
  • 相关阅读:
    C#/Net代码精简优化技巧(二)【转】
    IsSpecialName特性及其他问题【转】
    &、|与&&、||的比较
    序列化后存储Cookie
    序列化反序列化操作
    C#/Net代码精简优化技巧(一)【转】
    .Net 中的序列化与反序列化【转】
    c#对象序列化(二进制序列化)BinaryFormatter【转】
    POJ 2828 Buy Tickets(单点更新) 详细题解和思路
    Color the ball HDU 1556 (非线段树做法)
  • 原文地址:https://www.cnblogs.com/raising/p/13069750.html
Copyright © 2011-2022 走看看