Java学习之String

一、String

  关于String类型变量,我们必须知道String并不是基本数据类型,而是一个对象,String对象为不可变对象,一旦在内存中创建,内容不能发生变化,若要对字符串内容改变,那么就会创建新对象。

  当创建字符串对象的时候,我们知道在初始化之前,值为null。

String s1 = ””;
String s2 = null;
String s3 = new String();

s2表示的对象是还未创建,因此,它的内存尚未分配

s1,s3则表示有内存空间,只是空间里面没有值

  String常用方法:

  equals()   ——判断内容是否相同。

 compareTo() ——判断字符串的大小关系。

 compareToIgnoreCase(String int)    ——在比较时忽略字母大小写。

equalsIgnoreCase() ——忽略大小写的情况下判断内容是否相同。

reagionMatches() ——对字符串中的部分内容是否相同进行比较

charAt(int index) ——返回指定索引index位置上的字符,索引范围从0开始。

indexOf(String str)——从字符串开始检索str,并返回第一次出现的位置,未出现返回-1。

indexOf(String str,int fromIndex);——从字符串的第fromIndex个字符开始检索str。

lastIndexOf(String str)——查找最后一次出现的位置。

lastIndexOf(String str,int fromIndex)—-从字符串的第fromIndex个字符查找最后一次出现的位置。

starWith(String prefix,int toffset)—–测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

tarWith(String prefix)——测试此字符串是否以指定的前缀开始。

endsWith(String suffix)——测试此字符串是否以指定的后缀结束。

public String subString(int beginIndex)——返回一个新的字符串,它是此字符串的一个子字符串。

public String subString(int beginIndex,int endIndex)——返回的字符串是从beginIndex开始到endIndex-1的串。

public String replace(char oldChar,char newChar)。

public String replace(CharSequence target,CharSequence replacement)——把原来的etarget子序列替换为replacement序列,返回新串。

public String replaceAll(String regex,String replacement)——用正则表达式实现对字符串的匹配。

二、StringBuilder/StringBuffer

  StringBuffer是线程安全的,同步处理的,性能稍慢

  StringBuilder是非线程安全的,并发处理的,性能稍快(建议使用)

三、String测试

  

/**
 * Java中的字符串对象为不变对象,意思是字符串对象创建后,内容不能改变,若想改变内容必须创建新对象。
 * java使用字符串常量池来缓存通过字面量创建的字符串对象,并重用它们。
 * @author Administrator
 *
 */
public class StringDemo1 {
    public static void main(String[] args) {
        String s1 = "Hello";
        String s2 = "World";
        String s3 = s1 + s2;
        String s4 = "HelloWorld";
        String s5 = "Hello";

        System.out.println(s1==s5);
        System.out.println(s3==s4);
        System.out.println(s3.equals(s4));

        s4 += "!";
        System.out.println(s3==s4);
    }
}
public class StringDemo2 {
    public static void main(String[] args) {
        /*
         * 编译器有一个优化措施,在编译源程序时,所计算表达是两边的内容都是字面量
         * 那么会直接计算,并将结果编译到字节码文件中
         * 这样的好处在于JVM运行时不用每次都计算了。
         * 所以下面的代码在字节码文件中为
         * String = "123abc"
         */

        String s1 = "123abc";
        String s2 = "123abc";
        String s3 = "123" + "abc";
        String s4 = "123";
        String s5 = s4 + "abc";
        String s6 = 1 + "23" + "abc";
        String s7 = 1 + ‘2‘ + "3abc";//53abc
        String s8 = "33abc";

        String s9 = new String("123abc");
        System.out.println(s1==s9);

        System.out.println(s7);

        System.out.println(s1==s3);
        System.out.println(s1==s5);
        System.out.println(s1==s6);
        System.out.println(s1==s7);

    }
}
public class StringDemo3 {

    /**
     * int length()
     * 返回当前字符串的字符数量
     */
    @Test
    public void testLength(){
        String s = "HelloWorld";
        int len = s.length();
        System.out.println(len);
    }

    @Test
    public void testIndexOf(){
        String s = "HelloWorld";
        /*
         * int indexOf(String str)
         * 查看给定的字符串在当前字符串中的位置,若有,则返回给定字符串第一个字符在当前字符串中的下标位置。
         * 若没有,则返回 -1.
         *
         */
        int index = s.indexOf("l");
        System.out.println("index:" + index);
        index = s.indexOf("L");
        System.out.println("index:" + index);
        /*
         * 重载方法:可以从给定位置开始查找,第一次数显给定字符串的位置
         */
        index = s.indexOf("l", 3);
        System.out.println("index:" + index);
        /*
         * int lastIndexOf(String str)
         * 查看给定字符串在当前字符串中最后一次出现的位置
         */
        index = s.lastIndexOf("l");
        System.out.println("lastIndex:" + index);
    }

    @Test
    public void testSubString(){
        /*
         * String substring(int start,int end)
         * 截取字符串
         *
         * java api 中通常使用2个数字表示范围的时候,都是含头不含尾的。
         * 下面的:包含下标为5对应的字符,但是不包含8对应的字符
         */
        String s = "HelloWorld";
        String sub = s.substring(5, 8);//前闭后开,包括5,不包括8的新字符串
        System.out.println(sub);
        /*
         * 重载方法:
         *     String substring(int start)
         *     从给定位置开始一直截取到字符串末尾
         */
        sub = s.substring(4);
        System.out.println(sub);
    }

    /*
     * 获取域名
     *     从第一个 "." 之后的第一个字符开始截取到 第二个 "." 之前的字符串。
     */
    @Test
    public void testYuMing(){
        String url = "www.baidu.com/?video.video";
        int start = url.indexOf(".") + 1;//第一次位置
//        int end = url.lastIndexOf(".");
        int end = url.indexOf(".", start);//第二次位置
        String yuming = url.substring(start, end);
        System.out.println(yuming);
    }

    @Test
    public void testTrim(){
        String str = "      Hello World       ";
        /*
         * String trim()
         *     去除当前字符串两边的空白
         */
        String trim = str.trim();
        System.out.println(str);
        System.out.println(trim);
    }

    @Test
    public void testCharAt(){
        /*
         * char charAt(int index)
         *     查看当前字符串中给定位置的字符
         */
        String str = "HelloWorld";
        char charAt = str.charAt(5);//查看下标为5的字符是 ?即第六个字符
        System.out.println(charAt);
    }

    @Test
    public void startsAndEndsWidth(){
        /*
         * boolean startsWith(String str)
         *     判断当前字符串是否是以给定的字符串起始的
         *
         * boolean endsWith(String str)
         *     判断当前字符串是否是以给定的字符串结尾的
         */
        String str = "Hello World";
        boolean bool = str.startsWith("Hello");
        System.out.println("以Hello开头:" + bool);
        bool = str.startsWith("he");
        System.out.println(bool);

        bool = str.endsWith("World");
        System.out.println("以World开头:" + bool);
        bool = str.endsWith("LD");
        System.out.println(bool);
    }

    @Test
    public void testToUpperCaseAndToLowerCase(){
        /*
         * String toLowerCase()
         *     将当前字符串中的英文部分转换为全小写
         *
         * String toUpperCase()
         *     将当前字符串中的英文部分转换为全大写
         */
        String str = "你好 HelloWorld";

        String toLower = str.toLowerCase();
        System.out.println(toLower);

        String toUpper = str.toUpperCase();
        System.out.println(toUpper);
        /*
         * 该方法常被用来忽略大小写的字符串验证上
         */
    }

    @Test
    public void testValueOf(){
        /*
         * static String valueOf()
         *     该方法用若干重载,用于将其他类型转换为字符串
         */
        int i = 123;
        String iStr = String.valueOf(i);
        iStr += 4;
        System.out.println(iStr);

        double d = 123.456;
        String dStr = String.valueOf(d);
        System.out.println(dStr);

        System.out.println(String.valueOf(true));

        char[] c = new char[]{‘a‘,‘b‘,‘c‘,‘d‘,‘e‘};
        String cStr = String.valueOf(c);
        System.out.println(cStr);
    }

}

四、StringBuilder/StringBuffer测试

/**
 * StringBuilder
 *     其内部维护一个可变的字符数组,该类用于修改字符串使用
 * @author Administrator
 *
 */
public class StringBuilderDemo {
    @Test
    public void testToString() {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder("HelloWorld");
        //创建一个StringBuilder来修改字符串
        StringBuilder strBu = new StringBuilder("学习Java");
        String str = strBu.toString();//通过调用toString方法来获取内部表示的字符串
        System.out.println(str);
    }

    @Test
    public void testStringBuilderMothod(){
        /*
         * StringBuilder append(String str)
         *     向当前字符串末尾追加给定字符串的内容
         * 返回值就是当前StringBuilder对象,就是this
         * 这样做是为了连续编辑操作
         */
        StringBuilder sb = new StringBuilder("学习java");
        System.out.println(sb.toString());
        sb.append("赢取。。。");
//        sb.append("");
        System.out.println(sb.toString());

        sb.replace(8, sb.length(), "改变世界");//替换
        System.out.println(sb.toString());

        sb.delete(0, 8);//删除哪个区间的字符串
        System.out.println(sb.toString());

        sb.insert(0, "活着");//在哪里插入什么字符串
        System.out.println(sb.toString());

        sb.reverse();//反转字符串
        System.out.println(sb.toString());
    }
}
时间: 2024-08-24 16:37:23

Java学习之String的相关文章

Java学习之String对象为什么是不可变的

转自:http://www.2cto.com/kf/201401/272974.html,感谢作者的总结 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于Java初学者, 对

java学习笔记——String类

一.概述 ·字符串是一个特殊的对象 ·字符串一旦初始化就不可以被改变 ·String str = "abc"; ·String str1 = new String("abc"); 有什么区别? package com.java.study.StringDemo; public class StringDemo { public static void main(String[] args) { String s1 = "abc"; //s1是一个

Java学习笔记--String StringBuffer StringBuilder

String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String str0 = "最正常的创建方法"; System.out.println(str0); char[] c1 = new char[3]; c1[0] = 'c'; c1[1]

java学习笔记-String源码分析(2)

承接上篇文章关于String源码的分析,我们继续总结String中的方法 方法汇总 4.subString方法 public String substring(int beginIndex) public String substring(int beginIndex, int endIndex) subString()有2个重载版本,beginIndex指定开始索引(包括),endIndex指定结束索引(不包括).两个方法实现类似,我们关注一个即可. public String substri

[ Java学习基础 ] String字符串的基本操作

字符串的拼接 String字符串虽然是不可变的字符串,但也同样可以进行拼接,只是会产生一个新的对象.String字符串拼接的时候可以使用"+"运算符或String的concat(String str)方法.其中"+"运算符的优势是可以连接任何类型的数据拼接成为字符串,而concat方法只能拼接String类型的字符串. 示例如下: 1 String s1 = "Hello"; 2 // 使用+运算符连接 3 String s2 = s1 + &q

java学习之String类

标签(空格分隔): String类 String 的概述 class StringDemo{ public static void main(String[] args){ String s1="abc";//s1是一个类型变量,abc是一个对象, //字符串最大的特点,一旦被初始化就不可以改变, //s1="kk";//这时候是s1的指向变了,并不是abc String s2=new String("abc"); System.out.prin

Java学习笔记——String类型转换

一滴水里观沧海,一粒沙中看世界 --一带一路欢迎宴致辞 上代码: 1 package cn.stringtoobj; 2 3 public class TypeConversion { 4 5 public static void main(String[] args) { 6 //将String转int 7 String str = "123"; 8 int[] ints = new int[3]; 9 ints[0] = Integer.parseInt(str); 10 ints

java学习-3 string char char[] int 互转

1. string------>int 1.1   “123”----->  1  ,2  ,3 方法1: String s =new String(); s="123"; int i=Integer.parseInt(s.substring(0,2))// int i=123 int i=Integer.parseInt(s.substring(0,1))// int i=12 int i=Integer.parseInt(s.substring(1,2))// int

Java 学习 day13 String

01-String(概述) 02-String(常见功能-获取和判断) 03-String(常见功能-转换) 04-String(常见功能-切割和替换) 05-String(常见功能-比较和去除空格) 06-String(字符串练习1) 07-String(字符串练习2) 08-String(字符串练习3) 09-String(字符串练习4) 10-StringBuffer(常见功能-添加) 11-StringBuffer(常见功能-删除和修改) 12-StringBuilder