码迷,mamicode.com
首页 > 编程语言 > 详细

Java学习之String

时间:2015-06-24 23:57:01      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

一、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());
    }
}

 

Java学习之String

标签:

原文地址:http://www.cnblogs.com/chuanqi1415583094/p/String.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!