美文网首页
java字符串处理

java字符串处理

作者: 问天036 | 来源:发表于2018-05-20 16:27 被阅读0次

    1、简单介绍

          java中有八中基本数据类型,分别为byte short int long四种整数类型,double float 两种小数类型,char类型,boolean类型以及String类型,其中String类型则是最为特别的类型。String类型是一个类,每一个字符串都是String类的一个对象,所以字符串的实例都是存在于堆内存中的。当创建一个String变量的时候,他们指向的都是堆内存中的一个String对象的地址。而对于基本的数据类型在被创建的时候则直接指向这个变量的值;

    2、字符串的特点

            String类被final修饰,创建之后内容不能更改,当调用更改String对象的方法时都会创建一个新的String对象,将改变后的内容赋给新的对象,创建一个相同的String对象不会重新开辟新的空间,堆中内容可以重复使用

    3、字符串的创建

    3.1、字符串的创建有以下两种方式:

         1、字面量方式创建:方式一:String a = “aaa” ;

         2、对象方式创建:方式二:String b = new String(“aaa”);

    3.2、两种创建方式对比

           两种方式都能创建字符串对象,但方式一要比方式二更优。 因为字符串是保存在常量池中的,而通过new创建的对象会存放在堆内存中。

    一:字符串常量池中已经有字符串常量”aaa”

        •  通过方式一创建对象,程序运行时会在字符串常量池中查找”aaa”字符串,将找到的”aaa”字符串的地址赋给a。

        •  通过方式二创建对象,无论字符串常量池中有没有”aaa”字符串,程序都会在堆内存中开辟一片新空间存放新对象。

    二:字符串常量池中没有字符串常量”aaa”

        •  通过方式一创建对象,程序运行时会将”aaa”字符串放进字符串常量池,再将其地址赋给a。

        •  通过方式二创建对象,程序会在堆内存中开辟一片新空间存放新对象,同时会将”aaa”字符串引用放入字符串常量池,相当于创建了两个对象。

    字符串存储结构图

            当使用字面量创建字符串时,字符串会再常量池中创建对象,当使用对象类型中创建时会在堆中创建对象,如果在常量池中不存在新创建的对象,则常量池中也会创建一个string对象。

    4、字符串常用方法

    1 length()字符串的长度

       String a = "Hello Word!";

       System.out.println(a.length);

    输出的结果是字符串长度10。

    2 charAt()截取一个字符

      String a = "Hello Word";

      System.out.println(a.charAt(1));

    输出的结果是字符串a的下标为1的字符e。

    3 getchars()截取多个字符并由其他字符串接收

      String a = "Hello Word";

      char[] b =newchar[10];

      a.getChars(0, 5, b, 0);

      System.out.println(b);

    输出的结果为Hello,其中第一个参数0是要截取的字符串的初始下标(int sourceStart),第二个参数5是要截取的字符串的结束后的下一个下标(int sourceEnd)也就是实际截取到的下标是int sourceEnd-1,第三个参数是接收的字符串(char target[]),最后一个参数是接收的字符串开始接收的位置。

    4 getBytes()将字符串变成一个byte数组

    String a = "Hello Word";

    byteb[] = a.getBytes();

    System.out.println(newString(b));

    输出的结果为Hello Word的byte数组。

    5 toCharArray()将字符串变成一个字符数组

    String a = "Hello Word";

    char[]b = a.toCharArray();

    System.out.println(b); 

    输出的结果为Hello Word字符数组。

    6 equals()和equalsIgnoreCase()比较两个字符串是否相等,前者区分大小写,后者不区分

    String a = "Hello Word";

    String b = "hello word";

    System.out.println(a.equals(b));

    System.out.println(a.equalsIgnoreCase(b));

    输出的结果为第一条为false,第二条为true。

    7 startsWith()和endsWith()判断字符串是不是以特定的字符开头或结束

    String a = "Hello Word";

    System.out.println(a.startsWith("ee")); 

    System.out.println(a.endsWith("rd"));

    输出的结果第一条为false,第二条为true。

    8 toUpperCase()和toLowerCase()将字符串转换为大写或小写

    String a = "Hello Word";

    System.out.println(a.toUpperCase());

    System.out.println(a.toLowerCase());

    输出的结果第一条为“HELLO WORD”,第二条为“hello word”。

    9 concat() 连接两个字符串

    String a = "Hello Word";

    String b = "你好";

    System.out.println(b.concat(a));

    输出的结果为“你好Hello Word”。

    10 trim()去掉起始和结束的空格

    String a ="    Hello Word  ";

    System.out.println(a.trim());

    输出的结果为“Hello Word”。

    11 substring()截取字符串

    String a = "Hello Word";

    System.out.println(a.substring(0, 5));

    System.out.println(a.substring(6));

    输出的结果第一条为“Hello”,第一个参数0(beginIndex)是开始截取的位置,第二个参数5(endIndex)是截取结束的位置,输出的结果第二条是“Word”,参数6(beginIndex)是开始截取的位置。

    12 indexOf()和lastIndexOf()前者是查找字符或字符串第一次出现的地方,后者是查找字符或字符串最后一次出现的地方

    String a = "Hello Word";

    System.out.println(a.indexOf("o"));

    System.out.println(a.lastIndexOf("o"));

    输出的结果第一条是4,是o第一次出现的下标,第二条是7,是o最后一次出现的下标。

    13 compareTo()和compareToIgnoreCase()按字典顺序比较两个字符串的大小,前者区分大小写,后者不区分

    String a = "Hello Word";

    String b = "hello word";

    System.out.println(a.compareTo(b));

    System.out.println(a.compareToIgnoreCase(b));

    输出的结果第一条为-32,第二条为0,两个字符串在字典顺序中大小相同,返回0。

    14 replace() 替换

    String a = "Hello Word";

    String b = "你好";

    System.out.println(a.replace(a, b));

    System.out.println(a.replace(a, "HELLO WORD"));

    System.out.println(b.replace("你", "大家"));

    输出的结果第一条为“你好”,第二条为“HELLO WORD”,第三条为“大家好”。

    5、正则表达式简单介绍

    1,方括号:方括号中指定的单个字符才参与匹配

    public class Test {  

         public static void main(String[] args) {  

             System.out.println("a".matches("[abc]"));   //true  

             System.out.println("abc".matches("[abc]")); //false  

             System.out.println("a".matches("[a-c]"));   //true  

        }  

    }

    2,逻辑运算符

    逻辑运算符

    示例一:如果想要匹配多个字符,则不能使用[],而要使用()

    public class Test {  

       public static void main(String[] args) {  

         System.out.println("aa".matches("(a|aa)")); //true  

         System.out.println("aa".matches("[a|aa]")); //false  

        }  

    }  

    示例二:&&一定要在[]内部使用,否则会被认为是匹配2个连续的&符号

    public class Test {  

        public static void main(String[] args) {  

            System.out.println("a&&b".matches("a&&b")); //true  

            System.out.println("b".matches("[a-b&&b]"));    //true,等价于[b]  

            System.out.println("a".matches("[a-f&&[^bcdef]]")); //true,等价于[a]  

        }  

    }  

    示例三:^一定要在[]内部使用,否则将被认作起始边界符

    public class Test {  

        public static void main(String[] args) {  

            System.out.println("c".matches("[^a]"));    //true  

            System.out.println("c".matches("^a"));  //false  

            System.out.println("c".matches("[^a-c]"));  //false  

        }  

    }

    3,表示匹配次数的符号

    匹配次数

    4,预定义字符

    预定义字符

    示例四:

    public class Test {  

        public static void main(String[] args) { 

            System.out.println("a   b".matches("a.b")); //true  

            System.out.println("ab".matches("a.b"));    //false  

            System.out.println("aabb".matches("a.b"));  //false  

        }  

    }  

    5,边界字符

    边界字符

    6,java正则表达式使用对象

    java.util.regex.Pattern:Pattern的实例对象是不可变对象,线程安全

    java.util.regex.Matcher:Matcher的实例对象是非线程安全的

    public class Test {  

       public static void main(String[] args) {  

            Pattern p = Pattern.compile("\\d*");  

            Matcher m = p.matcher("123"); 

            System.out.println(m.matches());  

        }  

    }  

    相关文章

      网友评论

          本文标题:java字符串处理

          本文链接:https://www.haomeiwen.com/subject/ugltjftx.html