java String字符串

来源:互联网 发布:数控铣床编程基础知识 编辑:程序博客网 时间:2024/06/13 06:09

一String方法小结

1>替换

    String replace(char oldChar, char newChar);

    String replace(CharSequence target, CharSequence replacement);


2>切割
    String[] split(String regex);


3>子串
    String subString(int beginIndex);
    String subString(int beginIndex, int endIndex);
    String concat(String str) 将指定字符串连接到此字符串的结尾


4>转换
 4.1:将基本类型或字符数组转成字符串。

   静态方法:

     static String valueOf(int)

     static String valueOf(double)

     static String valueOf(Object obj)

     static String valueOf(char[]);

     static String valueOf(char[] data, int offset, int count)

     static String copyValueOf(char[]);

     static String copyValueOf(char[] data,int offset,int count);
      
 4.2:将字符串转成字符数组
      char[] tocharArray();

 4.3:将字符串转成字节数组。
      byte[] getBytes()
 
 4.4:将字符串转成大写或小写
      String toUpperCsae() 
      String toLowerCsae() 
     
特殊:1)字符串和字节数组在转换过程中,是可以指定编码的。
          2)String并未提供任何方法将String转为基本数据类型,然而这些方法又是十分常见的。
                Integer的方法  
                static int parseInt(String s) 
                其他类型由String到基本类型的转换也一样,都是利用包装类提供的静态方法,解析字符串


5>获取
 5.1:字符串中包含的字符数,也就是字符串的长度。
      int length():获取长度

 5.2:根据位置获取位置上某个字符。
      char charAt(int index)

 5.3:根据字符,或字符串获取该字符在字符串中的位置。

      int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。

      int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置。

      int indexOf(String str):返回的是str在字符串中第一次出现的位置。

      int indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置。

      int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。

      int lastIndexOf(String str, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。



6>判断

 6.1:字符串中是否包含某一个子串。

      boolean contains(str);

      int indexOf(int ch)如果该字符串没有改字符则会返回-1

 6.2:字符串中是否有内容。 

      boolean isEmpty()

 6.3:字符串是否以指定内容开头。
      boolean startsWith(str);

 6.4:字符串是否以指定内容结尾。
      boolean endsWith(str);

 6.5:判断字符内容是否相同,复写了object类中的equals方法。
      boolean equals(str);

 6.6:判断内容是否相同,并忽略大小写。
      boolean.equalsIgnorecase();


7>去除空格,比较
 7.1:将字符串两端的多个空格去除
      String trim();

 7.2:对两个字符串进行自然顺序的比较

      int compareTo(string);


示例代码

public static void main(String[] args) throws UnsupportedEncodingException {String s = "hello,word!";//1替换String s1 = s.replace("word", "gk");System.out.println("s1的内容是"+s1);//2切割String s2[] = s.split(",");System.out.println("按;切割后的字符串数组是"+Arrays.toString(s2));//子串String sub = s.substring(4, 11);System.out.println("想要得到的字符串是o,word!,结果是"+sub);//4转换byte bytes[] = s.getBytes("utf-8");char chars[] = s.toCharArray();System.out.println(Arrays.toString(bytes));System.out.println(Arrays.toString(chars));//5获取System.out.println("hello,word!的长度是"+s.length());System.out.println("获取,hello,word!中,数组下标应该是5的值‘,’,实际是"+s.charAt(5));System.out.println("获取,hello,word!中,号的数组下标应该是5,实际是"+s.indexOf(','));System.out.println("从e开始获取,hello,word!中,号的数组下标应该是5,实际是"+s.indexOf(',',1));System.out.println("获取,hello,word!中,word字符串第一次出现的数组下标应该是6,实际是"+s.indexOf("word",3));//6判断System.out.println("hello,word!中是否包含word字符串"+s.contains("word"));//7去空格,比较String st = " 内容为没有空格 ";System.out.println("去空格前"+st+"去空格后"+st.trim());String xs = "abc";String ds = "adc";System.out.println("xs<ds,返回一个小于0的数"+xs.compareTo(ds));}


二String,StringBuffer与StringBuilder的区别

public final class String 字符串常量
public final class StringBuffer 字符串变量(线程安全)
public final class StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。

所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
             String S1 = “This is only a” + “ simple” + “ test”;
             StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
            String S1 = “This is only a” + “ simple” + “test”; 其实就是:
            String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
            String S2 = “This is only a”;
            String S3 = “ simple”;
            String S4 = “ test”;
            String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做

在大部分情况下 StringBuffer > String
StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。

在大部分情况下 StringBuilder > StringBuffer
java.lang.StringBuilder
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

0 0
原创粉丝点击