---------------------字符串的复习-------------------------

* 1:字符串的初始化方式:
* 常量方式 String xx="aa";   //在String的声明常量方式,直接赋予字符值的是,String对象引用获取常量池中对象的地址,所以String声明出来是不可以改变的


* 对象方式 String xx=new String("aa"); //因为编译时会检查方法区常量池中是否已经存在需要创建的字符串对象。若存在直接将引用指向常量池的对象,此时只会在随后的运行时堆中创建一个对象。而如果不存在,会先在常量池中创建一个对象,在随后的运行时还会在堆中再创建一个对象,所以此时会创建两个对象


* 2:要理解字符串的不可变性
* 某个字符串一旦被初始化了 则其值不可改变

 

一个String对象被创建并被赋值(初始化)这个对象的值就不会变化。


*
* 如何解释字符串的不可变性?
* 从内存角度解释
* 3:从源代码角度解释 String类final 其中包含的字符数组也是final
* 4:字符串的常用方法要记牢

 

String 的含义:


    String 是定义一个字符串对象(内存中的字符串都是一个对象。)
      String 一旦被初始化就不能被改变(可以改变变量指向,但是不能改变对象内容)

    定义方式: String s1 = “abc”; //在内存中存在一个对象。
          String s2 = new String("abc"); //在内存中存在两个对象。
            String s3 = "abc";

      比较: s1 == s2 为false
          s1 == s3 为true (相同的字符串在静态池中一旦存在,就不会再产生新的该字符串了,以后其再出现,都使用它)
        String的equals方法: s1.equals(s2) == true;

字符串的常见方法:

    1、获取
        1.1、字符串中包含的字符数(也就是字符串的长度)
            int length(); (注意与数组中的length做区别,数组中为属性,字符串中为方法)

        1.2、某一个角标位置上的字符
            char charAt(int index); (当访问的角标不存在时,提示字符串角标越界异常)

        1.3、根据字符获取该字符在字符串中的角标位置
            int indexOf(int ch); 返回的是字符第一次出现的角标位置。
            int indexOf(int ch,int fromIndex); 返回的是从fromIndex开始字符出现的角标位置。

            int indexOf(String str); 返回的是字符串第一次出现的角标位置。
            int indexOf(String str,int fromIndex); 返回的是从fromIndex开始字符串 出现的角标位置。

              (当访问的字符 或 字符串不存在时,返回 -1)

            int lastIndexOf(int ch): 反向索引(种类和解释与正向索引相同 )
              注:反向索引只是从右向左索引找到第一次出现目标的角标位置, 返回的依然是角标位置。
    2、判断

        2.1、判断字符串中是否包含指定字符串
            boolean contains(CharSequence s) :CharSequence:为String实现的接口 

              特殊之处:indexOf(String str):可以索引字符串str第一次出现的位置,如果返回 -1,则表示该str不在字符串内。
                  所以,也可以用于对指定字符串判断是否包含。
                    if(str1.indexOf(“aaa”) == -1)
                    而且该方法既可以判断,由能获取位置。

        2.2、判断字符串是否有内容
            boolean isEmpty() :当且仅当长度为0时返回true。


        2.3、判断字符串是否以某某开头
            boolean startsWith(String prefix) 

        2.4、判断字符串是否以某某结尾
            boolean endsWith(String suffix) 


        2.5、判断字符串的内容是否相同
            boolean equals(Object anObject) (复写了Object 类中的equals方法)

        2.5、判断字符串的内容是否相同 ,(不考虑大小写)
            boolean equalsIgnoreCase(String anotherString)

    3、转换。
        3.1、 将字符数组转换成字符串
            构造函数: String(char[] value)
                  String(char[] value, int offset, int count): 将数组中从下标offset开始,一共count位字符转换成字符串。

            静态方法: static String copyValueOf(char[] data) 
                  static String copyValueOf(char[] data, int offset, int count) 

                  static String valueOf(char[] data) 


        3.2、 将字符串转换成字符数组
                 char[] toCharArray() 

        3.3、 将字节数组转换成字符串
                 String(byte[] value)
                 String(byte[] value, int offset, int count): 将数组中从下标offset开始,一共count位字符转换成字符串。
                      其他方法参见 3.5。

        3.4、 将字符串转换成字节数组
                 byte[] getBytes(String charsetName) 

        3.5、 将基本数据类型转换成字符串

                 static String valueOf(boolean b) 
                 static String valueOf(char c) 
                 static String valueOf(char[] data) 
                 static String valueOf(double d) 等等。


              注意:字符串和字节数组在转换过程中是可以指定编码表的。


    4、替换

        String replace(char oldChar, char newChar) : 返回一个数组,它是用newChar 替换就数组中的oldchar等到的。(一个一个的替换)
        String replace(CharSequence target, CharSequence replacement) : 后替前,用新串替换原串中的子串。


        注:原字符串没有改变,只是新出现了一个替换后的字符串(字符串一旦初始化,不能改变)
            如果要替换的字符没有,还是返回原串,不会生成新的字符串。

    5、切割,分割

        String[] split(String regex) : 指定其中某一个字符或字符串,以其下刀,切割字符串(其实应当依据正则表达式规则拆分)

    6、子串:(获取一个字符串的一部分)

        String substring(int beginIndex) //从指定下标位置到结尾。
        String substring(int beginIndex, int endIndex) //从指定下标位置到结束下标位置前一个

    7、转换、去除空格、比较

        7.1:将字符串转换成大写或者小写。
              String toUpperCase() 
              String toLowerCase() 
        7.2:将字符串两端多余的空额去除。
              String trim() 
        7.3:将两个字符串进行自然顺序的比较。
              int compareTo(String anotherString) 
              int compareToIgnoreCase(String str) :不考虑大小写。

            从第一位开始比较,比参数大返回正数,比参数小返回负数,都相等返回参数为0:一旦在某一位上分出大小了,便不再向后比较。

 


*
* StringBuilder StringBuffer String 区别:
* 1:每次String拼接小字符串 每次拼接都会生成一个String对象
* 而StringBuilder StringBuffer 都是在原有对象直接拼接字符串


* 2:StringBuilder 线程非安全的 拼接字符串效率高
* StringBuffer 线程安全的 拼接字符串效率低
* 如果StringBuilder StringBuffer 被定义在某个方法内部 那就是线程安全的 在单线程情况下
* 直接使用StringBuilder即可
*
* 如果StringBuilder StringBuffer 被定义在方法外部 那就是线程非安全的  在多线程情况下
* 需要使用 StringBuffer

 

 

代码说明:

 

 

复制代码

private static String generateURLByMap(Map<String, String> paramsmap) {
//1:定义字符串对象
StringBuilder sbBuilder = new StringBuilder();
//2:拼接url前缀
sbBuilder.append(URL_PREFIX);
sbBuilder.append("?");
//3: 循环map拼接参数
//常见的迭代map集合的方式:
//keyset
//entryset
String key=null;//参数名称
String value=null;//参数的值
for(Map.Entry<String, String> entry: paramsmap.entrySet()) {
key=entry.getKey();
value=entry.getValue();

sbBuilder.append(key+"="+value);
sbBuilder.append("&");
}
//http://..bwImg.gif?_mid=wangguang&c_time=1449142044528...&
//把最后的&去掉
//sbBuilder = sbBuilder.substring(0, sbBuilder.lastIndexOf("&"));

return sbBuilder.substring(0,sbBuilder.lastIndexOf("&"));
}
复制代码
posted @ 2019-06-05 19:23  wuyingying  阅读(132)  评论(0编辑  收藏  举报