java String、StringBuffer、StringBuilder

Stringjava

将字节数组或者字符数组转成字符串能够经过String类的构造函数完成。
正则表达式

char[] arr = {'w','a','p','q','x'};
String s = new String(arr,1,3);
System.out.println("s="+s);

结果为:apq  将数组转换为字符串 而后输出其中的 1到3的数值

String类的特色: 字符串对象一旦被初始化就不会被改变。数组

String s = "abc";//建立一个字符串对象在常量池中。		
String s1 = new String("abc");//建立两个对象一个new一个字符串对象在堆内存中。

System.out.println(s==s1);//false   由于两个对象的指向位置不一样
System.out.println(s.equals(s1)); //true 由于两个字符串的值相等的

String对象经常使用的方法

1,获取:多线程

    1.1 获取字符串中字符的个数(长度).app

        int length();函数

    1.2 根据位置获取字符。ui

        char charAt(int index);spa

    1.3 根据字符获取在字符串中的第一次出现的位置.线程

        int indexOf(int ch)code

        int indexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置 

        int indexOf(String str);

        int indexOf(String str,int fromIndex);

        根据字符串获取在字符串中的第一次出现的位置.

        int lastIndexOf(int ch)

        int lastIndexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置 

        int lastIndexOf(String str);

        int lastIndexOf(String str,int fromIndex);

    1.4 获取字符串中一部分字符串。也叫子串.

        String substring(int beginIndex, int endIndex)//包含begin 不包含end 。

        String substring(int beginIndex);

String  s = "abcdae";
System.out.println("length:"+s.length()); //length 6
System.out.println("char:"+s.charAt(2)); //char c  
System.out.println("index:"+s.indexOf('k'));//index -1   -1不存在
System.out.println("lastIndex:"+s.lastIndexOf('a'));//lastIndex 4 从后面开始出现a的位置
System.out.println("substring:"+s.substring(2,4)); //substring cd 取出子字符串

2,转换。

    2.1 将字符串变成字符串数组(字符串的切割)

        String[]  split(String regex):涉及到正则表达式.

    2.2 将字符串变成字符数组。

        char[] toCharArray();

    2.3 将字符串变成字节数组。

        byte[] getBytes();

    2.4 将字符串中的字母转成大小写。

        String toUpperCase():大写

        String toLowerCase():小写

    2.5  将字符串中的内容进行替换

        String replace(char oldch,char newch);

        String replace(String s1,String s2);

    2.6 将字符串两端的空格去除。

        String trim();

    2.7 将字符串进行链接 。

        String concat(string);

String  s = "张三,李四,王五";
String[] arr = s.split(",");     //正则表达式 		
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);    //张三 李四 王五  以逗号为分割符,取值
}
		
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
    System.out.println(chs[i]);   //张 三 , 李 四 , 王 五  (每一个字节取一次)
}
s = "ab你";
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
    System.out.println(bytes[i]);  //97 98 -60 -29 (a b的ASCII码,汉字Unicode码 两个字节 而且首位1因此负的)
} 
		
System.out.println("Abc".toUpperCase());
String s1 = "java";
String s2 = s1.replace('q', 'z');   //替换字符,没有的话 不替换
System.out.println(s1==s2);   //true
		
System.out.println("-"+"    ab  c    ".trim()+"-");  // -ab  c- 去除两端的空格

 replace并不会直接在原字符串上进行修改

String s1 = "hello";
String s2 = "java";            
s2.replace('j','o');
System.out.println(s2);  //值为 java

s1 = s2.replace('j','o');
System.out.println(s1);  //值为 oava

3,判断

    3.1 两个字符串内容是否相同啊?

        boolean equals(Object obj);

        boolean equalsIgnoreCase(string str);忽略大写比较字符串内容。

    3.2 字符串中是否包含指定字符串?

        boolean contains(string str);

    3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。

        boolean startsWith(string);

        boolean endsWith(string);

String s = "abc";
System.out.println(s.equals("ABC".toLowerCase()));   //true
System.out.println(s.equalsIgnoreCase("ABC"));       //true 
System.out.println(s.contains("cc"));                //false

String str  = "ArrayDemo.java";
System.out.println(str.startsWith("Array"));        //true
System.out.println(str.endsWith(".java"));          //true
System.out.println(str.contains("Demo"));           //true

4,比较。

        int compareTo(string);

   System.out.println("abc".compareTo("aqz"));     //返回 -15

String s1 = new String("abc");
String s2 = s1.intern();
System.out.println(s1.equals(s2));  // true
System.out.println(s1 == s2);    //false

 StringBuffer:就是字符串缓冲区。用于存储数据的容器。

 特色:

1,长度的可变的。 

2,能够存储不一样类型数据。

3,最终要转成字符串进行使用。

4,能够对字符串进行修改。

既然是一个容器对象。应该具有什么功能呢?

1,添加:

    StringBuffer append(data);

    StringBuffer insert(index,data);

2,删除:

    StringBuffer delete(start,end):包含头,不包含尾。

    StringBuffer deleteCharAt(int index):删除指定位置的元素 

3,查找:

    char charAt(index);

    int indexOf(string);

    int lastIndexOf(string);

4,修改:

    StringBuffer replace(start,end,string);

    void setCharAt(index,char);

增删改查  C(create)U(update)R(read)D(delete) 

StringBuffer sb = new StringBuffer("abce");
sb.replace(1, 3, "nba");   //替换bc 为 nba  变为anbae
sb.delete(1, 3);           //删除nb  变为aae
sb.setCharAt(2, 'q');      //替换e为q 变为aaq
sb.reverse();              //字符串反转 eea 
sb.delete(0,sb.length());   //清空数组区

StringBuffer sb = new StringBuffer("abce");
sb.append("xixi");           //末尾添加xixi   变为abcexixi
sb.insert(2, "qq");          //在2处添加 qq   变为abqqce
sb.append(4).append(false);  //末尾添加 4false

StringBuilder API与StringBuffer同样

String StringBuffer StringBuilder区别:

String 类型和 StringBuffer 类型的区别: String 是不可变的对象

StringBuffer是线程同步的。一般用于多线程。

StringBuilder是线程不一样步的。一般用于单线程。 它的出现提升效率。

java 内存分配 图解

public class StringBuilderTest {
	public static void main(String[] args) {

		StringBuilder s1 = new StringBuilder("hello");
		StringBuilder s2 = new StringBuilder("java");
		
		System.out.println(s1+"......."+s2);  //指向建立对象地址 
		show(s1,s2);
		
		System.out.println(s1+"......."+s2);  //指向开始时建立对象的地址
		
	}

	private static void show(StringBuilder s1, StringBuilder s2) {
		
		s1.append(s2);
		System.out.println(s1+"......."+s2);  
		s1 = s2;    //这个是 局部变量中 地址变化 全局的没有变
		System.out.println(s1+"......."+s2);
	}
	
}

输出结果

先分配两个对象内存

第一个 打印出的结果  hello.......java

 调用show方法 内存变化append后内存变化

show中打印出来的结果 hellojava.......java

 因为在show函数中 s1=s2,s1地址指向s2,因此内容都为java

s1 = s2 后结果          java.......java

show方法调用完成后,释放内存  可是因为show方法对0x44地址内容进行了添加,因此,内容变了 结果  hellojava.......java


StringBuilder转换为String  方法

StringBuilder zanArray;

zanArray.toString();          //StringBuilder转换为String  方法     

int转换string方法

int position;

String s;

s = position+"";

相关文章
相关标签/搜索