java String

来源:互联网 发布:c语言今有雉兔同笼 编辑:程序博客网 时间:2024/06/07 11:28

一、String 类

字符串是一个特殊的对象;字符串一旦初始化就不可以被改变;String str=“abc”;String str1 = new String("abc");有什么区别呢?

二、Java.lang.String (不能有子类)

public final classString extends ObjectimplementsSerializable,Comparable<String>,CharSequence

 class StringDemo 
{
public static void main(String[] args) 
{
/*
String s1 = "abc";//s1是一个类类型变量, "abc"是一个对象。
//字符串最大特点:一旦被初始化就不可以被改变。


String s2 = new String("abc");


//s1和s2有什么区别?
//s1在内存中有一个对象。
//s2在内存中有两个对象。

System.out.println(s1==s2);
System.out.println(s1.equals(s2));//String类复写了Object类中equals方法,
//该方法用于判断字符串是否相同。
*/


String s = "abcde";
method_1(s);
}


/*
String类是对字符串事物的描述。
该类定义了专门用于操作字符串的方法。
"abc":
*/


public static void method_1(String s)
{
char ch = s.charAt(3);


System.out.println("ch="+ch);
int num = s.codePointAt(3);

System.out.println("num="+num);

String s1 = "qq";
s1 = s1.concat("mm");

System.out.println("s1="+s1);
System.out.println("qq"+"mm");

String a = "opq";
String b = "opq";
System.out.println("a==b:"+(a==b));

}
}

1>

String s1="abc";// s1 是一个类型变量,"abc"是一个对象,字符串最大的特点:一旦被初始化就不可以改变

2> 

s1=“kk”; 这时s1引用的对象地址发生改变,“abc对象不变”.改变s1的指向

3>

String s1=“abc”;

String s2=new String(“abc”);

String s3=“abc”;

a1和a3比较s1==s3 返回true

s1和s2进行对比,结果分别是:false,true   

分析结果:

false:通过new String(“abc”)这样的方式是new一个新的String对象,没有查找内存池,所以返回false。

true:在Object里面的equals方法,比较对象的地址,但String类里面重写了equals方法,建立了自己对象独特的内容。该方法用于判断字符串是否相同。

4>

s1和s2 有什么区别?

s1在内存中有一个对象。  “abc”

s2在内存中有两个对象。new String ,  “abc”

5>

字符串在内存中有常量池,存储各个字符串,只要字符串相同,及指向同一个对象。

三.String (常见功能-获取和判断)

String 类适用于描述字符串事物,那么他就提供了多个方法对字符串进行操作,常见的操作有哪些?

1.获取

1.1 字符串中包含的字符数,也就是字符串的长度。

          int length();  获取长度(数组获取长度的是length 常量)

1.2 根据位置获取位置上某个字符。(此字符串制定索引处的 char值,第一个 char 值位于索引 0处)

          char charAt(int index)

1.3 根据字符获取该字符在字符串中位置

          

int indexOf(int ch):                    返回的是ch在字符串中第一次出现的位置。传入的值是(包括 0 和 0xFFFF) int indexOf(int ch, int fromIndex) :   从fromIndex指定位置开始,获取ch在字符串中出现的位置。

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

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

int lastIndexOf(int ch) :             返回指定字符在此字符串中最后一次出现处的索引。

int lastIndexOf(int ch, intfromIndex) :

int lastIndexOf(String str):

int lastIndexOf(String str,int fromIndex) :

特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。

 所以,也可以用于对指定判断是否包含。

    if(str.indexOf(“aa”)!=-1)

而且该方法即可以判断,又可以获取出现的位置。

2.判断

2.1 字符串中是否包含某一子串。传入的参数为接口类型,Java.lang.CharSequence

boolean contains(str);

2.2 字符串中是否有内容

boolean isEmpty():原理就是判断长度是否为0

2.3 字符串是否以指定的开头

boolean statsWith(str)

2.4 字符串是否以指定内容结尾

boolean endsWith(str)

2.5 判断字符串内容是否相同.复写了Object 类中的equals方法

boolean equals(str)

2.6 判断内容是否相同,并忽略大小写

boolean equalsIgnoreCase();

3.转换  

      3.1 将字符数组转化成字符串

      构造函数 :String (char [] )

                           String (char[],offset,count): 将字符数组中的一部分转化为字符串。

       静态方法:static String copyValueOf(char[] data);

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

                          static String valueOf(char[]):

      3.2 将字符串转化成字符数组

           char[]     toCharArray():

     3.3  将字节数组转化为字符串

           String (byte [] )

           String  (byte[],offset,count):将字节数组中的一部分转化为字符串

     3.4 将字符串转化为字节数组

           byte[] getBytes() :

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

           static String valueOf(int)

           static  String valueOf(double)

           // 3 + .///   String.valueOf(3):

      特殊:字符串和字节数组在转换过程中,是可以指定编码表的

4.替换

            String replace ( char oldChar,char newChar):

            如果替换的字符串不存在,返回的还是原串。

5.切割

             String[]  split(regex):

   //注意必须是这个格式  ,正则表达式

6.子串 。获取字符串中的一部分

String  substring(begin):

String substring(begin,end):

                       返回一个新字符串,他是此字符串的一个子字符串。该字符串从指定的beginIndex 处开始,直到索引endIndex - 1处的字符。因此该子字符串的长度为endIndex-beginIndex。

 7.转换,去除空格,比较。

   7.1将字符串转化成大写或者小写

String toUpperCase():

String toLowerCase():

   7.2 将字符串两端多个空格去除

String trim();

    7.3 对两个字符串进行自然比较

int copareTo(string ):

   String s1 = "a1c";  String s2="aaa";    sop(s1.compareTo(s2));

因为在第二位,2个字符不同,所以第三个字符不用比较。 结果 -48、s1< s2

返回:如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。


四、String (字符串)练习

     字符串的长度和字符串的角标是两个概念,长度是从1开始,角标是从 0 开始

1> 模拟一个 trim 方法,去除字符串两端的空格

    思路:1.判断字符串第一个位置是否为空格,如果是继续向下判断,直到不是空格为止,结尾处判断空格也是如此

                 2.当开始和结尾判断到不是空格的时候就是要获取的字符串

2> 将一个字符串进行反转 。将字符串中指定部分进行反转,"abcdefg“”:

    思路:  1. 曾经学习过对数组的元素进行反转

                   2.将字符串变成数组,对数组反转

                   3.将反转后的数组变成字符串

                    4.只要将反转的部分的开始和结束为止作为参数的传递即可


3> 

 获取一个字符串在另一个字符串中出现的次数。

  "abkkcdkkefkkskk"

  思路:

  1>定义个计数器。

  2>获取kk第一次出现的位置。

  3>从第一次出现位置后剩余的字符串中继续获取kk出现的位置。

   每获取一次就计数一次。

  4>当获取不到时,计数完成。

使用split方法,切割字符串,如果字符串最前端就有需切割的字符,那么会多存储一个空字符串,照成切割后,该字符串出现的次数+1

4> 获取两个字符串中最大相同子串。

第一个动作:将短的那个串进行长度一次递减的子串打印。

  "abcwerthelloyuiodef"

  "cvhellobnm"

  思路:

      1、将短的那个子串按照长度递减的方式获取到。

      2、将每获取到的子串去长串中判断是否包含,

          如果包含,已经找到!。


    


0 0