您的位置:首页 > 职场人生

黑马程序员_Java基础_API文档之String类

2014-05-20 19:39 447 查看
一,javaAPI文档,就是java给我们的已经实现了的接口,也就是我们能够直接使用的部分。

其实我们在学习java的过程实际上就是学习javaAPI的过程,学会了javaAPI的使用,熟记里面的常用接口,类,方法,掌握他们的用法,你就学会了java。

二,java中的字符串类

为什么要将字符串String类独立拿出来学习呢?因为很多计算机语言中都字符串进行了描述以及功能的提供,我们对电脑的操作,很多都是用了字符串,字符串也是随处可见的。它是一个很重要的知识点,我们必须对字符串的操作掌握得滚瓜烂熟。

三,javaAPI关于String类提供的方法,这里我们只通过java文档列举出常用的。

构造方法:

1,String(byte[] bytes)
构建bytes字节数组的字符串对象

2,String(byte[] bytes,int offset,int length)
构建一个字符串,它的组成是bytes数组从offset索引代表的字节开始,长度为length的子串。

3,String(char[] value)
构建一个字符串,该字符串是由字符数组value组成的。

4,String(char[] value,int offset,int count)
构建字符串,该字符串的构成字符是从value字符处组的offset索引的字符开始,长度为count

5,String(Stirng original)
构建一个字符串对象,该字符串初始化为original。

方法:

1,获取:

(1)字符串中包含的字符个数就是字符串的长度,int length()
获取字符串长度

(2)根据位置获取某个位置上的字符,char charAt(int index)
获取字符串的index角标的字符。

(3)根据字符获取该字符在字符串中的位置,

int indexOf(int ch)
获取ch在字符串中第一次出现的位置。

int indexOf(int ch,int formIndex)
从字符串的formIndex角标的位置开始,获取ch在字符串第一次出现的位置。

int indexOf(String str)
获取str字符串在字符串中出现的位置角标

int indexOf(String str,int fromIndex)
获取字符串str从字符串的fromIndex位置开始第一次出现的位置

int lastIndexOf(int ch)
获取ch在字符串最后一次出现的位置

int lastIndexOf(int ch,int offset)
从字符串的offset处开始,获取ch在字符串中最后一次出现的位置

int lastIndexOf(String str)

int lastIndexOf(String str,int offset)

2,判断:

(1)字符串中是否包含某个子串,boolean contains(String str)判断字符串str是否包含在字符串中。也可以使用indexOf判断,某个字符串第一次出现的位置,如果第一次出现过返回-1.
str.indexOf(str) != -1;

(2)字符串是否有内容,boolean isEmpty(),原理是长度是否为0

(3)字符串是否以指定的内容开头,boolean startWith(String str)

(4)字符串是否以指定的内容结尾,boolean endWith(String str)

(5)字符串内容是否相同,该方法是重写Object类中的equals方法

(6)忽略字符串大小写,判断字符串是否相等,boolean equalsIgnoreCase()

3,转换:

(1)将字符数组转换成字符串。

构造函数:

String(char[])

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

静态方法:

static Stirng copyValueOf(char[] ch)

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

static Stirng valueOf(char[] ch)

(2)将字符串转换成字符数组

Char[] toCharArray();该方法是一个常用的方法,要牢记。

(3)将字节转换成数组

构造函数:

String(byte[] bytes)

String(byte[] bytes,int offset,int count)

(4)将字符串转换成字节数组,byte[] getBytes()

(5)将基本数据类型转换成字符串,

static String valueOf(int)

static String valueOf(double)

还有一个特殊的就是任何基本数据类型+””也可以将基本数据类型转换成字符串。

4,替换

String replace(oldchar,newchar)

类似的和可以替换字符串

5,切割

String[] split(regex),用指定的regex分割字符串,得到的是字符串数组,可以通过遍历对字符串数组的元素进行操作

6,获取字符串的一部分

String substring(int begin),从字符串的begin索引出开始截取字符串,到字符串的结束为止

String substring(int begin,int end),从字符串的begin索引开始,到end索引结束截取子串

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

(1)将字符串转成大写或则小写。

String toUpperCase();

String toLowerCase();

(2) 将字符串两端的多个空格去除。String trim();

(3) 对两个字符串进行自然顺序的比较。int compareTo(string);

字符串的实际应用举例:

需求一:模拟一个trim方法,去除字符串两端的空格;

思路:

1,判断字符串的第一个位置是否为空格,如果是继续往下判断,直到不是空格为止,结尾处判断空格也是如此;

2,当开始处和结尾处判断都不是空格时,就是要获取的字符串;

class StringExe1
{
public static void sop(Object obj) {
System.out.println(obj);
}
public static void main(String[] args) {
String str = "   skdjghjkl   ";
sop(str);
str = myTrim(str);
sop(str);
}
public static String myTrim(String str) {
int start = 0;
int end = str.length() - 1;
while(start<=end && str.charAt(start)==' ')
{
start ++;
}
while(end>=start && str.charAt(end)==' ') {
end --;
}
return str.substring(start,end);
}
}


需求二:将一个在字符串进行反转,将字符串指定部分进行反转。

思路:

1,曾经学习过对数组的元素进行反转。

2,将字符串变成数组,对数组进行反转;

3,将反转的数组变成字符串;

4,只要将或反转的部分的开始和结束位置作为参数进行传递即可;

class StringExe2 {
public static void sop(Object obj) {
System.out.println(obj);
}
public static void main(String[] args) {
String str = "asdfgh";
sop(reverse(str));
}
public static String reverse(String str) {
char[] arr = str.toCharArray();
for (int start=0,end=arr.length-1;start<end ;start++,end-- )
{
change(arr,start,end);
}
return new String(arr);
}
public static void change(char[] arr,int start,int end) {
char temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}


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

"abkkcdkkefkkskk"

思路:

1,定义个计数器;

2,获取kk第一次出现的位置;

3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置,每次获取一次就计数一次;

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

public class StringExe3
{
public static void sop(Object obj) {
System.out.println(obj);
}
public static void main(String[] args) {
String str = "gshjkksagkkaglkksdakk";
sop(str);
System.out.println(getStr(str,"kk"));
}
public static int getStr(String str,String key) {
int count = 0;
int index = 0;
while((index=str.indexOf(key)) != -1) {
str = str.substring(index + key.length());
count ++;
}
return count;
}
}


需求四:获取两个字符串中最大的相同子串,第一个动作:将短的那个串进行长度依次递减的子串打印。

"abcwerthelloyuiodef"

"cvhellobnm"

思路:

1,将短的那个子串按照长度递减的方式获取到;
2,将获取到的子串去长串中判断是否包含,如果包含已经找到;

public class StringExe4
{
public static void sop(Object obj) {
System.out.println(obj);
}
public static void main(String[] agrs) {
String s1 = "abcwerthelloyuiodef";
String s2 = "cvhellobnm";
sop(get(s1,s2));
}
public static String get(String s1,String s2) {
String max = "",min = "";
max = s1.length()>s2.length() ? s1:s2;
min = (max==s1) ? s2:s1;
for (int i=0;i<min.length() ;i++ )
{
for (int x=0, y=min.length()-i;y!=min.length()+1 ;x++,y++ )
{
String temp = min.substring(x,y);
if (max.contains(temp))
return temp;
}
}
return "";
}
}


四,StringBuffer以及StringBuilder的使用

StringBuffer是一个字符串的缓冲区,可以理解为一个容器,里面装的是字符串,这个容器为我们提供了很多直接操作字符的方法。

它的特点是:(1)长度可变。(2)可以操作多个数据类型。(3)最终会通过toString方法最终变成字符串。

方法:

1,存储。

StringBuffer append():将指定数据作为参数添加到已有数据结尾处。

StringBuffer insert(index,数据):可以将数据插入到指定index位置。

2,删除。

StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。

StringBuffer deleteCharAt(index):删除指定位置的字符。

3,获取。

char charAt(int index) :获取容器角标为index的字符

int indexOf(String str) :获取str字符串在容器中第一次出现的位置

int lastIndexOf(String str) :获取str字符串在容器中最后一次出现的位置

int length() :获取容器的长度

String substring(int start, int end):截取容器的字符串子串

4,修改。

StringBuffer replace(start,end,string):替换start开始到end结束位置的字符串为sring

void setCharAt(int index, char ch) :将容器角标为index的字符设置为ch

5,反转。

StringBuffer reverse():将容器中的字符串反转

6,将缓冲区中指定数据存储到指定字符数组中。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

提到StringBuff就不得不说到StringBuilder,StringBuilder是jdk1.5之后才出现的,它的用法与StringBuffer一样,但是只有一点不同,就是StringBuffer是线程同步的,在多线程中使用效率比较高。StringBuilder是线程不同步的,在单线程中使用效率比较高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: