zoukankan      html  css  js  c++  java
  • java 字符串笔记

    java字符串当中有三个关于字符串对象的类。

    String

    首先谈论下他们各自的含义:
    1.String含义为引用数据类型,是字符串常量.是不可变的对象,(显然线程安全)在每次对string类型进行改变的时候其实都等同与生成了一个新的String对象.然后指针指向新的String对象,所以经常改变内容的字符串最好不使用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了之后.JVM的垃圾回收(GC)就会开始工作,对系统的性能会产生影响。

    源码String开头可以看到是被final修饰的类,不能被继承

    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */
        }
    

    String的方法有很多,下面用的比较多几个。

    public void show(CharSequence seqence);
         char charAt(int index) 
    	 //返回指定索引的 char 值。 
    	 int length() 
    	 //返回此字符序列的长度。 
    	 CharSequence subSequence(int start, int end) 
    	 //返回一个新的CharSequence,它是此序列的子序列。 
    	 String toString() 
    	 //返回一个包含此序列中字符的字符串,该字符串与此序列的顺序相同。
    	 
    

    例子

    /**
    * 
    * @author liqh
    * @version 创建时间:2019年4月23日 下午3:22:17
    * @Description: *把字符串的首字母转大写,其他字母转小写,同时将每个字符使用_下划线隔开
    */
    public class StringDemo03 {
    
    
    	public static void main(String[] args) {
    		String str = "youAreWelcome";
    		 //1.获取得到首字母,将首字母转换大写
    		 String firstStr= String.valueOf(str.charAt(0)).toUpperCase();
    		 //2.获取其他字母,将其他字母转为小写
    		 String opther = str.substring(1).toLowerCase();
    		 //3.将首字母和其他字母拼接
    		 System.out.println(firstStr.concat(opther));
    		 //4.转化为数组对象
    		 String[] arr = firstStr.concat(opther).split("");
    		 //5.利用String的join进行拼接
    		String result = String.join("_", arr);
    		System.out.println(result);
    		 
    	}
    
    }
    
    实现结果:Y_o_u_a_r_e_w_e_l_c_o_m_e
    

    StringBuffer:

    • 字符串缓冲区
    • 字符串池
    • 字符流缓冲池 数据库连接池 线程池...
    • StringBuffer

    StringBuffer常用方法

    StringBuffer() :构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。

    StringBuffer(CharSequence seq):
    构造一个字符串缓冲区,它包含与指定CharSequence 相同的字符。

    StringBuffer(int capacity) :构造一个不带字符,但具有指定初始容量的字符串缓冲区。
    StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容对StringBuffer对象本身进行操作,而不是生成新的对象.所所以在改变对象引用条件下,一般推荐使用StringBuffer.同时主要是使用append和insert方法。

    StringBuffer实现增删改查和一些其他的方法

    增 :
    StringBuffer append(String str) 
    StringBuffer insert(int offset, String str)
    删 :
    StringBuffer deleteCharAt(int index) 
    StringBuffer delete(int start, int end) 
    改:
    public StringBuffer replace(int start,int end,String str)
    其他:
    public StringBuffer reverse() 
    public String substring(int start)
    public String substring(int start,int end)
    
    

    3.StringBuilder
    StringBuilder是线程不安全,不同步,效率高的可变字符序列,提供一个与StringBuffer兼容的API,但不同步.设计作为StringBuffer的一个简易替换,用在字符缓冲区被单个线程使用的时候.效率比StringBuffer更快

    区别:

    1. 执行速度:StringBuilder > StringBuffer > String
    2. 线程安全:StringBuffer线程安全.StringBuilder线程不安全
    3. String适用与少量字符串操作
    • StringBuilder适用单线程下在字符缓冲区下进行大量操作的情况
    • StringBuffer使用多线程下在字符缓冲区进行大量操作的情况

    String和 StringBuffer实现字符串的反转

    import java.util.Scanner;
    
    /**
    * 
    * @author liqh
    * @version 创建时间:2019年4月23日 下午8:31:30
    * @Description: 使用String和StringBuffer实现字符串倒置 
    * 
    */
    public class Demo01 {
    
    
    
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		System.out.println("请输入字符串:");
    		String str= input.next();
    		reverseString(str);
    		String str2= input.next();
    		reverseStringBuffer(str2);
    		
    	}
    	
    	public static String reverseString(String str) {
    		String result="";
    		//从最后进行for循环遍历
    		for (int i =str.length()-1 ; i >= 0; i--) {
    			//str.charAt(i)每一个字符
    			result+=str.charAt(i);
    		}
    		System.out.println("反转的字符串:"+result);
    		return result;
    	}
    	
    	public static String reverseStringBuffer(String str) {
    		System.out.println(new StringBuffer(str).reverse().toString());
    		return new StringBuffer(str).reverse().toString();
    	}
    	
    }
    
    /*请输入字符串:
    1234567890
    反转的字符串:0987654321*/
    
  • 相关阅读:
    把eclipse 3.4的插件移动到独立目录中
    Crest大家都来山寨一个GObject吧
    c# 扩展方法奇思妙用性能篇一:扩展方法性能初测
    [幽默]今天看了几页c语言入门,想写个ERP, 帮我看看 技术上还差些什么?
    c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 "In" 扩展
    [个人]我的积分与排名日志
    反驳 老赵 之 “伪”递归
    c# 扩展方法奇思妙用变态篇一:由 Fibonacci 数列引出 “委托扩展” 及 “递推递归委托”
    c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展
    瑞士军刀 VS 单一职责原则
  • 原文地址:https://www.cnblogs.com/lqhhome/p/10758677.html
Copyright © 2011-2022 走看看