Java的常用类String 05

时间:2022-11-13 00:33:12

  

一、String类的特点:

字符串对象一旦被初始化就不会被改变

例如:

public class StringDemo{

       public static void main(String[] args){

             String s = "abc";

              s = "nba";

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

      }

}

Java的常用类String 05

重点:

1.引用的s放在栈中
2.字符串常量放在常量池(字符串常量池)中,第一次创建放入池中,第二次使用直接把引用指向池中已有的数据。

3.newString("xxx")创建的 数据放在堆中,每次new都会在堆中创建一块内存存放数据。

4. String类复写了Object中的equals方法,建立了String类自己的判断字符串对象是否相同的依据。只比较字符串内容,不比较地址。


二、常用构造方法摘要

1.String()
 
初始化一个新创建的 String 对象,它表示一个空字符序列。


2.String(byte[] bytes) 
 使用平台的默认字符集解码指定的bety数组,构造一个新的 String。


3. String(byte[] bytes,int offset, int length)
 
通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的String。新 String 的长度是字符集的函数,因此可能不等于该子数组的长度。

bytes - 要解码为字符的 byte

offset - 要解码的第一个 byte 的索引

length - 要解码的 byte 数


4.String(char[] value)
 
分配一个新的 String,它表示当前字符数组参数中包含的字符序列。


5.String(String original)
  初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。


三、String类部分方法

1、获取:

a.

获取字符串中字符的个数(长度)

int length();

b.

根据位置获取字符

    char charAt(int index);

c.

根据字符获取在字符串中的位置

     int indexOf(int ch);

    indexO方法参数f类型为int是为了既可以支持字符,也可以支持字符在ASCII码中对应的数字。

d.

从指定位置开始查找ch第一次出现的位置。

     int indexOf(int ch,int fromIndex);

    int indexOf(String str);

     int indexOf(String str,int fromIndex);

  根据字符串获取在字符串中第一次出现的位置(从后开始找)。

    int lastIndexOf(int ch);

    int lastIndexOf(int ch,int fromIndex);

     int lastIndexOf(String str);

     int lastIndexOf(String str,int fromIndex);

   P.S: 可以根据-1,来判断该字符或者字符串是否存在。

e.

获取字符串中的一部分字符串,也叫子串。

   String substring(int beginIndex,intendIndex);

    String substring(int beginIndex);

例如:

public class StringMethodDemo{
public static void main(String[] args){
StringMethodDemo();
}

public static void StringMethodDemo(){
String s = "abcdae";
System.out.println( "substring:" + s.substring(2));
System.out.println( "substring:" + s.substring(2,4));
}
}

Java的常用类String 05

2、转换:

a.

将字符串变成字符串数组(字符串的切割)

    String[] split(String regex);涉及到正则表达式。

b.

将字符串变成字符数组

           char[] toCharArray();

将字符串变成字节数组

     char[] getBytes();

c.

将字符串中的字母转成大小写

    String toUpperCase();大写

    String toLowerCase();小写

d.

将字符串中的内容进行替换

     String replace(char oldCh,char newCh);

     String replace(String s1,String s2);

 P.S: replace方法如果没有找到要替换的内容,则返回的还是原字符串。

e.

去除字符串两端空格

    String trim();


3、判断:

a.

两个字符串内容是否相同呢?

    boolean equals(Object obj);

    boolean equalsIgnoreCase(String str);忽略大小写比较字符串内容。

b.

字符串中是否包含指定字符串

     boolean contains(String str);

c.

字符串是否以指定字符串开头,是否以指定字符串结尾

     boolean startsWith(String str);

     boolean endsWith(String str);

d.

    int compareTo(String str);  

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


3、返回字符串对象的规范化表示形式

  String intern();

    当调用intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用。


四、练习:

例1:

/*
2,将一个字符串进行反转,将字符串中指定部分进行反转,"abcdefg";
思路:
1,曾经学过的对数组的元素进行反转。
2.将字符串变成数组,对数组反转。
3,将反转后的数组变成字符串。
4,只要将反转的部分的开始和结束位置作为参数传递即可,
*/

class StringTest2
{
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{
String s = "0123456";
sop("("+s+")");
sop("("+reverseString(s)+")");

}

private static void reverse(char[] arr,int x,int y)
{
for (int start = x,end = y-1; start<end; start++,end--)
{
swap(arr,start,end);
}
}
private static void swap(char[] arr,int x,int y)
{
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}

public static String reverseString(String s,int start,int end)
{
//字符串变数组
char[] chs = s.toCharArray();

//反转数组
reverse(chs,start,end);

//将数组变成字符串。
return new String(chs);
}<pre name="code" class="java">}

 
 
 
Java的常用类String 05

例2:

/*
3,获取一个字符串在另一个字符串中出现的次数。
“abkkdsfgadkksdkk”
思路:
1,定义一个计数器
2,获取kk第一次出现的位置。
3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置
每获取一次就计数一次。
4,当获取不到时,计数完成。
*/


class StringTest3
{
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{
String s = "abkkdsfgadkksdkk";
sop("count="+getSubCount_2(s,"kk"));

}
public static int getSubCount(String str,String key)
{
int count = 0;
int index = 0;

while ((index = str.indexOf(key))!=-1)
{
sop("str="+str);
str = str.substring(index+key.length());

count++ ;

}
return count;

}
public static int getSubCount_2(String str,String key)
{
int count = 0;
int index = 0;

while ((index = str.indexOf(key,index))!=-1)
{
sop("index="+index);
index = index + key.length();

count++ ;

}
return count;

}
}

Java的常用类String 05


例3:

/*
4,获取两个字符串中最大相同字串,第一个动作:将短的那个串进行长度依次递减的字串打印,
"dasfasdahelloded"
"hkvmdhellodgf"
思路:
1,将短的那个字串按照长度递减的方式获取到。
2,将每获取到的字串去长串中判断是否包含。
如果包含,已经找到!
*/

class StringTest4
{
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{
String s1 = "dasfasdahelloed";
String s2 = "hkvmdhellogf";
sop(getMaxSubString(s1,s2));

}

public static String getMaxSubString(String s1,String s2)
{
String max = "",min = "";

max = (s1.length()>s2.length())?s1:s2;

min = (max==s1)?s2:s1;
sop("max="+max+".....min="+min);
for (int x = 0; x<min.length(); x++)
{
for (int y = 0,z = min.length()-x; z!=min.length()+1; y++,z++)
{
String temp = min.substring(y,z);

//sop(temp);
if (max.contains(temp))
{
return temp;
}
}
}

return "";
}
}

Java的常用类String 05