zoukankan      html  css  js  c++  java
  • Java中常用的API(二)——String

    在第一节中我们介绍了Object类的方法以及操作,那么这一节,我们将介绍一个新的类:String。
    String类是我们经常使用的类,应用十分广泛。同时,String类中封装了一系列的方法,非常常用,接下来我们就一一介绍。

    String

    String类描述的是文本字符串序列。
    一般我们使用String类的时候,都是直接赋值,代码如下:

    String name = "luck";

    还有另外一种使用String类的方法,那就是new一个String对象,代码如下:

    String name = new String("luck");

    1. 比较方法
    接下来,就用下面的代码作为例子:

    public static void main(String args[]){
            String name = "wang";
            String name1 = "wang";
            String name2 = new String("wang");
            String name3 = new String("wang");
            System.out.println(name==name1);
            System.out.println(name1==name2);
            System.out.println(name2==name3);
    }

    你认为输出的结果是什么样子的?你心里可能会非常没有谱,没关系,我们先讲一下原理。
    首先,在使用第一种赋值方法的时候,String name = “wang”这个语句会首先检查是否在字符串常量池中存在这个字符,如果存在,则直接将这个字符串的地址赋给name,如果没有,则将在字符串常量池中创建一个”wang”的字符串。
    所以,毋庸置疑,第一个输出语句输出的结果是true,因为name、name1相当于指向的是同一个地址。
    接着,使用String name2 = new String(“wang”);这条语句的时候,该语句会创建两个对象,首先会先检查字符串常量池中存不存在jack这个字符串对象,如果不存在就会创建,如果存在就返回内存地址值。然后,new String这个语句就会在堆内存中开辟一个字符串对象。总共两个对象。
    所以,name2、name3分别指向的是这两个对象的内存地址,所以返回的是false,自然name1和name2比较的返回结果也是不同的。

    2. 获取方法

    · int length()  获取字符串的长度
    · char charAt(int index) 获取特定位置的字符 (注意角标越界问题)
    · int indexOf(String str) 获取特定字符str的位置(overload)
    · int lastIndexOf(int ch) 获取最后一个该字符的位置(这里的ch代表的是字符的编码值)

    3. 判断方法

    boolean endsWith(String str) 是否以指定字符结束
    boolean isEmpty()是否长度为0 
    Boolean contains(CharSequences) 是否包含指定序列 应用:搜索
    Boolean equals(Object anObject) 是否相等
    Boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等

    4. 转换方法

    String(char[] value) 将字符数组转换为字符串
    String(char[] value, int offset, int count)
    Static String valueOf(char[] data)
    static String valueOf(char[] data, int offset, int count)
    char[] toCharArray()  将字符串转换为字符数组

    5. 其他方法

    String replace(char oldChar, char newChar) 替换
    String[] split(String regex) 切割
    String substring(int beginIndex) 
    String substring(int beginIndex, int endIndex)截取字串
    String toUpperCase() 转大写
    String toLowerCase() 转小写
    String trim() 去除空格

    根据上述的内容,我们可以进行一些实际的应用操作。

    实际应用

    1. 去除字符串两边的空格
    这个题目相对来讲是比较简单的,思路如下:先判断出首位不是空格的位置,再判断出末尾空格开始的位置,这样就能利用字符串的切割函数来切割字符串,从而得到我们要的子串。

    public class Demo1{
        public static void main(String args[]){
            String name = "      *fsdf      ";
            String name1 = "    6    ";
            System.out.println(trim(name));
            System.out.println(trim(name1));
        }
        public static String trim(String str){
            //0.定义首位两个位置的角标
            int start = 0;
            int end = str.length()-1;
            //1.使用循环遍历出首位非空格元素的位置
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)==' '){
                    start++;
                }else{
                    break;
                }
            }
            System.out.println("首位非空格元素的位置:" + start);
            for(;end<str.length() && end>=0;){
                if(str.charAt(end) == ' '){
                    end--;
                }else{
                    break;
                }
            }
            System.out.println("末尾非空格元素的位置:" + end);
            //2.切割字符串
            if(start<=end){
                return str.substring(start, (end+1));
            }else{
                return "=_=";
            }
        }
    }

    输出结果如下:

    首位非空格元素的位置:6
    末尾非空格元素的位置:10
    *fsdf
    首位非空格元素的位置:4
    末尾非空格元素的位置:4
    6

    需要特别注意的是,使用substring这种函数的时候,第一个参数是startIndex,即开始位置,这个就是真实的开始位置;而后面第二个参数是endIndex,即末尾位置,这时定位的是这个位置的前一位。也就是说,一个字符串,如果要从第二位开始切割到第五位截止,那么写入的参数应当是2,6。

    2. 根据文件路径,获取文件名称
    我们知道,通常情况下,windows系统的文件路径格式如:D:file est.java这样的形式,那么,我们应当如何获取到文件名称呢?
    下面这种办法十分高效:

    public static String getFileName2( String path ){
          return path.substring( path.lastIndexOf("\") + 1 );
        }
    }

    首先,获取到最后一个“”的位置,将这个位置加一,就是文件名首字母的位置,然后直接截取就可以了。

    3. 将字符串对象中存储的字符反序
    反序就是将字符串颠倒顺序,像这样:abcd———–>dcba,那么对于字符串又该如何实现呢?我们无法直接对字符串进行颠倒顺序的操作,但是我们可以对字符数组进行这样的操作,所以,首先应该做的是将字符串转换成字符数组,接下来就好办了。

    public static String reaverseString( String src ){
    
           // 0. 将字符串转换为字符数组
           char chs[] = src.toCharArray();
           // 1. 循环交换
           for ( int start = 0 , end = chs.length - 1; start < end ; start++,end-- )
           {
               // 2. 数据交换
               char temp = chs[end];
               chs[end] = chs[start];
               chs[start] = temp;
           }
          // 3. 将字符数组转换为字符串
           return new String( chs );
    }

    4.求一个子串在整串中出现的次数

    public static int countTag(String str,String tag){
        //0.初始化位置变量以及计数变量
        int index = 0;
        int count = 0;
        //1.定义循环,计算tag出现的次数
        while((index = str.indexOf(tag)) != -1){
            //2.看子串
            System.out.println(str);
            str = str.substring(index + tag.length());
            //3.累加
            count++;
        }
        return count;
    }

    这个其实夜视仪相当简单的,最重要的一点就是将字符串str反复切割,切去的部分包括刚刚匹配到的tag的内容,这样再次循环执行这个操作,最终就能够得到数量。

  • 相关阅读:
    从无到有制作Deb包的一个实例
    Redis内存存储结构分析
    岳麓实践论
    金砖四国(巴西、俄罗斯、印度和中国)
    用LLVM开发新语言
    QQ云输入法
    http://baike.baidu.com/view/1926473.htm
    21世纪商业评论
    update ubuntu to 11.10
    gnu make 中文手册教程pdf
  • 原文地址:https://www.cnblogs.com/roobtyan/p/9576731.html
Copyright © 2011-2022 走看看