现在的位置: 首页 > 综合 > 正文

java基础_Day13

2017年09月30日 ⁄ 综合 ⁄ 共 9989字 ⁄ 字号 评论关闭

1,String概述:
       字符串数据存放在常量池中。
       方法区:

          方法数据
          静态数据
          常量池:字符串常量

class StringDemo
{
     public static void main(String[] args)
     {
          String s1 = new String("haha");//对象里边包含字符串对象
          String s2 = "haha";//s2是一个类类型的变量,"haha"是一个对象。
                                //字符串最大的特点:一旦初始化就不能被改变。字符串也是一个常量。
          s2 = "kk";//s2指向了"kk"这个对象。但是"haha"这个对象任然没变。
          System.out.println(s2);
          String s3 = "haha";
//          System.out.println(s1==s2);//==比较的是地址值
//          System.out.println(s1.equals(s2));//boolean equals(Object anObject)
                                                            //将此字符串与指定的对象比较。
          System.out.println(s2==s3);
//          s1与s2的区别:
//                         s1在内存中有一个对象;
//                         s2在内存中有两个对象;
     }
}

2,获取、判断:

          1,获取:
            1,1获取字符串中包含的字符数,也就是字符串的长度。
                 int length():获取长度。
            1,2根据位置获取位置上的某个字符。
                 char charAt (int index)
            1,3根据字符获取该字符在字符串中的位置
                 int indexOf(int ch):返回的ch在字符串中第一次出现的位置
                 int indexOf(int ch,int formIndex):从formIndex指定的位置开始,获取ch在字符串中的位置

                 int indexOf(String str):返回的是str在字符串中第一次出现的位置
                 int indexOf(String str,int formIndex):从formIndex指定的位置开始,获取str在字符串中的位置。
         2,判断:
            1,1字符串中是否包含某个子串
                  boolean contains(str)
                  indexOf(str):返回的是str在字符串中第一次出现的位置,如果返回-1,表示该字符在字符串中不存在,所以也可以用于判断指定是否包含。
                     eg:if(str.indexOf("aa");)而且该方法即可判断,又可以获取位置
            1,2字符中是否有内容
                  boolean isEmpty():原理就是判断长度是否为0
            1,3字符串是是否是以指定内容开头
                  boolean startWith(str)
            1,4字符串是否是以指定内容结束
                  boolean endsWith(str)
            1.5判断字符串内容是否相同;复写了Object中的equals方法,Object中用于比较地址值。只能用于比较引用数据类型
                  boolean equals(str)
            1.6判断字符串的内容是否形同,并忽略大小写:
                 boolean equalsIgnoreCase()
         eg:                                                                

class StringDemo2                                                                                                                                                                                              

{

     public static void method_is()

     {

          String str1 = "StringDemo.java";

          String str2 = "stringdemo.java";

          sop(str1.contains(".java"));

          sop(str1.isEmpty());

          sop(str1.endsWith("java"));

          sop(str1.startsWith("String"));

          sop(str1.equals(str2));

          sop(str1.equalsIgnoreCase(str2));

     }

     public static void method_get()

     {

          String str = "abcdefgacd";

          sop(str.length());

          sop(str.charAt(3));

          sop(str.indexOf("r"));

          sop(str.indexOf("d",4));

     }

    

     public static void sop(Object obj)

     {

          System.out.println(obj);

     }

     public static void main(String[] args)

     {

          method_get();

          method_is();

     }

3,转换:

       3,1将字符数组转成字符串
                    String(char[] value)
                                分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
                    String(char[] value, int offset, int count)
                                分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
                    static String copyValueOf(char[] data)
                                返回指定数组中表示该字符序列的 String。
                    static String copyValueOf(char[] data, int offset, int count)
                               返回指定数组中表示该字符序列的 String。

       3,2将字符串转成字符数组
                   char[] toCharArray()
                               将此字符串转换为一个新的字符数组。

      3,3将字节数组转成字符串
                   String(byte[] bytes)
                               通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
                   String(byte[] bytes, int offset, int length)
                               通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
        3,4将字符串转成字节数组
                    byte[] getBytes()
                              使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
      3,5将基本数据类型转换成字符串
                    static String valueOf(boolean b)
                                返回 boolean 参数的字符串表示形式。
                    static String valueOf(char c)
                                返回 char 参数的字符串表示形式。
                    static String valueOf(char[] data)
                                返回 char 数组参数的字符串表示形式。
                    static String valueOf(char[] data, int offset, int count)
                                返回 char 数组参数的特定子数组的字符串表示形式。
                    static String valueOf(double d)
                                返回 double 参数的字符串表示形式。
                    static String valueOf(float f)
                                返回 float 参数的字符串表示形式。
                    static String valueOf(int i) //3+""等同于String.value(3)
                                返回 int 参数的字符串表示形式。
                    static String valueOf(long l)
                                返回 long 参数的字符串表示形式。
                    static String valueOf(Object obj)
                                返回 Object 参数的字符串表示形式。 

          特殊注意:字符串和字节数组在转换过程中是可以指定编码表的。
4,切割和替换:
        

//替换:

//          String replace(char oldChar, char newChar) //如果替换的字符不存在,返回会的还是原串。
//          返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
//      String replace(CharSequence target, CharSequence replacement)
//          使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
//切割:
//         String[] split(regex);
//子串:
//      String substring(begin);
//      String substring(begin,end);
//换换,去除空格,比较
//          将字符串转成大写或小写
//               String toUpoerCase();
//               String toLowerCase();
//          将字符串两端的多个空格去除
//              String trim();
//          将两个字符串进行自然顺序比较
//               int compareTo(string);
class StringDemo1
{
     public static void method_7()
     {
          String s = "   hello   java    ";
          sop(s.toUpperCase());
          sop(s.toLowerCase());
          sop(s.trim());
     }
     public static void method_sub()
     {
          String s = "abcdefg";
          sop(s.substring(2));//cdefg//从指定为位置到结尾
          sop(s.substring(2,4));//cd//包含头不包含尾//s.substring(0,s.length());
     }
     public static void method_split()
     {
          String s = "zhangsan,lisi,wangwu";
          String[] arr = s.split(",");
          for(int x=0;x<arr.length;x++)
          {
               sop(arr[x]);
          }
     }
     public static void method_replace()
     {
          String s = "hello java";
          sop("s="+s);//s=hello java
          String s1 = s.replace('q','n');
          sop("s1="+s1);//s1=hello jnvn
          String s2 = s.replace('q','n');
          sop("s2="+s2);//s2=hello java
          String s3 = s.replace("java","word");
          sop("s3="+s3);//s3=hello word
     }
     public static void sop(Object obj)
     {
          System.out.println(obj);
     }
     public static void main(String[] args)
     {
          method_7();
          method_sub();
          method_split();
          method_replace();
     }
}
          
5,//StringBuffer是一个容器
//     特点:
//          长度是可变化的
//          可以操作多个数据类型
//          最终可以通过toString方法变成字符串
//     C create U update R read D delete
//     1,存储
//          StringBuffer append():将指定数据添加到已有数据的结尾处
//          StringBuffer insert(index,数据):可以将制定数据插入到指定的index位置
//     2,删除
//          StringBuffer delete(start.end):删除缓冲区中的数据,包含头不含包尾
//          StringBuffer deleteChar(index):删除指定位置的字符
//     3,获取
//          char charAt(int index) 
//          int indexOf(String str)
//          int length()
//          String substring(int start) 
//          String substring(int start, int end)
//     4,修改
//          StringBuffer replace(int start, int end, String str) 
//          void setCharAt(int index, char ch)
//  5,反转:
//      StringBuffer reverse() 
//  6,void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
//          将缓冲区中的指定数据存储到指定数组中
class StringBufferDemo
{
     public static void sop(Object obj)
     {
          System.out.println(obj);
     }
     public static void method_6()
     {
          StringBuffer sb = new StringBuffer("abcdef");
          char[] chs = new char[6];
          sb.getChar(1,4,chs,1);
          for(x=0;x<chs.length;x++)
               sop("arr["+x+"]="+arr[x]+";");
     }
     public static void method_update()
     {
          StringBuffer sb = new StringBuffer("abcdef");
          sb.replace(1,4,"java");
          sb.setCharAt(2,'k');
          sop(sb.toString());
     }
     public static void method_delete()
     {
          StringBuffer sb = new StringBuffer("abcdef");
          sb.delete(1,3);
          //清除缓冲区:
          sb.delete(0,sb.length());
          sop(sb.toString());
     }
     public static void main(String[] args)
     {
          method_update();
          StringBuffer sb1 = new StringBuffer();
          sb1.append("abc").append(true).append(34);
//          StringBuffer sb1 = sb.append(34);
          sb1.insert(1,"tt");
          sop(sb1.toString());
//          sop(sb1.toString());
//          sop("sb==sb1: "+(sb==sb1));
     }
}
6,//JDK1.5以后出现了StringBuilder
//StringBuffer是同步的,多线程用它,因为安全
//StringBuilder是不同步的,当线程建议用它因为效率高
//JAVA升级考虑三点:
//     1,提高效率
//     2,简化书写
//     3,提高安全性
//基本数据类型对象包装类:
//byte          Byte
//short          Short
//int        Integer
//long          Long
//boolean     Boolean
//float          Float
//double     Double
//char          Character
//基本数据类型对象包装类的最常见作用:
//     就是用于基本数据类型和字符串类型之间的转换
//
//基本数据类型转成字符串
//     基本数据类型+""
//     static String toString(int i)
//          返回一个表示指定整数的 String 对象。
//     如:Integer.toString(34);//将34转换成"34";
//         
//
//字符串转换成基本数据类型:
//     static int parseInt(String s)
//          将字符串参数作为有符号的十进制整数进行解析。
//     static boolean parseBoolean(String s)
//          将字符串参数解析为 boolean 值。
//     Xxx a = Xxx.parseXxx(String);//静态方式
//          int a = Integer.parseInt("123");//将"123"转换成123,必须传入数字类型的字符串
//          boolean b = Boolean.parseBoolean("true");
//     Integer i = new Integer("123");    
//     int num = i.intValue();
//
//将十进制转成其他进制:
//     static String toBinaryString(int i)
//                 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
//     static String toHexString(int i)
//                 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
//     static String toOctalString(int i)
//                 以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
//
//其他进制转成十进制:
//     static int parseInt(String s, int radix)
//          使用第二个参数指定的基数,将字符串参数解析为有符号的整数
//            int x = Integer.parseInt("110",10);
//            int x = Integer.parseInt("120",2);//格式错误
//            int x = Integer.pareInt("3c",16);
//
class IntegerDemo
{
     public static void main(String[] args)
     {
          Integer s1 = new Integer("123");
          Integer s2 = new Integer(123);
          sop(s1==s2);
          sop(s1.equals(s2));
          Integer x = new Integer(4);
          Integer x =4;//自动装箱。//new Integer(4)
          x = x/* x.intValue()*/ +2;//x+2:x进行自动拆箱,变成了int型,和2进行加法运算。再将和进行装箱赋给x.
          Integer M = 128;
          Integer N = 128;
          sop(M==N);
          Integer A = 127;
          Integer B = 127;
          sop(A==B);//结果为true.因为A和B指向了同一个Integer对象。因为当数值在byte范围内,对于新特性,如果该数值已经存在,则不会再开辟空间
     }
}
     

抱歉!评论已关闭.