您的位置:首页 > 编程语言 > Java开发

java 基础学习-03 api 中String类的学习

2015-05-29 17:01 489 查看
1、String对象的初始化 及两种初始化的区别

由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:

<span style="white-space:pre">		</span>String s = “qwer”;
s = “Java语言”;
//   其实按照面向对象的标准语法,其格式应该为:
String s = new String(“abc”);
s = new String(“Java语言”);


只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如String s = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。

这里就存在了初始化的区别

2.获取字符串信息

String s = “qwer”;

a) 字符串包含的字符数,也就是字符串的长度。

Int length();

例如 system.out.println(s.length()); //输出结果为4

b) 根据位置获取位置上的字符

char charAt(int intdex);

system.out.println(s.charAt(2));//输出结果为e intdex为下标 从0开始

c) 根据字符获取位置

当索引值不存在是 返回值是-1

Int indexof(int ch);返回ch字符串第一次出现的位置 输入的值是ascall麻值

Int indexof(int ch,int formindex);返回ch字符串从fromindex位置开始出现的位置

Int indexof(String str);返回str字符串第一次出现的位置

Int indexof(String str,int formindex);返回str字符串从fromindex位置开始出现的位置

d) 下列四个方法与上面类似,不同的是下面的方法是找最后一个匹配的内容。或者说是从后面开始找

int lastIndexOf(int ch)

int lastIndexOf(int ch, int fromIndex)

int lastIndexOf(String str)

int lastIndexOf(String str, int fromIndex)

<span style="white-space:pre">			</span>String s="qwerrabcdetutyyu";
<span style="white-space:pre">			</span>System.out.println(s.indexOf(97));
<span style="white-space:pre">			</span>System.out.println(s.indexOf('97', 1));
<span style="white-space:pre">			</span>System.out.println(s.indexOf("rr"));
<span style="white-space:pre">			</span>System.out.println(s.indexOf("rr", 1));
<span style="white-space:pre">			</span>System.out.println(s.indexOf("u"));
<span style="white-space:pre">			</span>System.out.println(s.lastIndexOf("u"));
<span style="white-space:pre">			</span>//输出结果分别是5,5,3,3,11,15


3.字符串的判断

a) 判断字符串中是否包含某一个字串 indexOf方法也可用于判断 因为不存在时的返回值为-1;

boolean contains(str);

b) 判断字符串是否含有内容

boolean isempty();原理是判断字符串长度是否为0 空返回为false 不为空 返回true

c) 判断字符串是否以指定内容开头

boolean startswith(str)

d) 判断字符串是否以指定内容结尾

boolean endswith(str );

e) 判断字符串是否相同

boolean equals(str);此方法复写了object中的方法 object中的方法 比较的是地址,而此方法比较的是 字符串是否相同

f) 判断字符串是否相同 并忽略大小写

boolean equalsIgnoeCase (); 此方法可用来验证码的验证

4.字符串的转换

a) 字符数组转换成字符串

1.构造函数的转换 直接new String(char [])

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

2.静态方法 valueOf(char[] data) :

static String copyValueOf(char[] data) :

static String copyValueOf(char[] data, int offset, int count) :这两个方法将char数组转换成String,与其中一个构造函数类似。

<span style="white-space:pre">	</span>byte[] b = {'a','b','c','d','e','f','g','h','i','j'};
char[] c = {'0','1','2','3','4','5','6','7','8','9'};
String sb = new String(b);                 //abcdefghij
String sb_sub = new String(b,3,2);     //de

String sc = new String(c);                  //0123456789
String sc_sub = new String(c,3,2);    //34
String sb_copy = new String(sb);       //abcdefghij
System.out.println("sb:"+sb);
System.out.println("sb_sub:"+sb_sub);
System.out.println("sc:"+sc);
System.out.println("sc_sub:"+sc_sub);
System.out.println("sb_copy:"+sb_copy);
// 输出结果:sb:abcdefghij
//             sb_sub:de
//               sc:0123456789
//                sc_sub:34
//              sb_copy:abcdefghij


void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) :该方法将字符串拷贝到字符数组中。其中,srcBegin为拷贝的起始位置、srcEnd为拷贝的结束位置、字符串数值dst为目标字符数组、dstBegin为目标字符数组的拷贝起始位置。

<span style="white-space:pre">						</span>char[] s1 = {'I',' ','l','o','v','e',' ','h','e','r','!'};//s1=I love her!
String s2 = new String("you!");
s2.getChars(0,3,s1,7); //s1=I love you!
System.out.println( s1 );//<span style="font-family: 宋体;">结果为:</span><span style="font-family: 'Times New Roman';">I love you!</span>


b) 字符串转换成字符数组

Char tochararray();

c) 字节数组转换成字符串

String(byte[ ] bytes):通过byte数组构造字符串对象。

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

d) 字符串装换成字节数组

byte[] getBytes() :将该String对象转换成byte数组。

<span style="white-space:pre">		</span>String s = “计算机”;
byte[] b = s.getBytes();   //使用本机默认的字符串转换为byte数组
byte[] b = s.getBytes(“gb2312”); //使用gb2312字符集转换为byte数组
在实际转换时,一定要注意字符集的问题,否则中文在转换时将会出现问题。


e) 将基本类型数据转换成字符串

static String valueOf(boolean b)

static String valueOf(char c)

static String valueOf(char[] data)

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

static String valueOf(double d)

static String valueOf(float f)

static String valueOf(int i)

static String valueOf(long l)

static String valueOf(Object obj)

5.替换

该方法的作用是替换字符串中所有指定的字符,然后生成一个新的字符串。经过该方法调用以后,原来的字符串不发生改变。例如:

<span style="white-space:pre">				</span>String s = “abcat”;
String s1 = s.replace(‘a’,’1’);


该代码的作用是将字符串s中所有的字符a替换成字符1,生成的新字符串s1的值是”1bc1t”,而字符串s的内容不发生改变。

如果需要将字符串中某个指定的字符串替换为其它字符串,则可以使用replaceAll方法,例如:

<span style="white-space:pre">			</span> String s = “abatbac”;
String s1 = s.replaceAll(“ba”,”12”);


该代码的作用是将字符串s中所有的字符串”ab”替换为”12”,生成新的字符串”a12t12c”,而字符串s的内容也不发生改变。

如果只需要替换第一个出现的指定字符串时,可以使用replaceFirst方法,例如:

<span style="white-space:pre">			</span>String s = “abatbac”;
String s1 = s. replaceFirst (“ba”,”12”);


该代码的作用是只将字符串s中第一次出现的字符串”ab”替换为字符串”12”,则字符串s1的值是”a12tbac”,字符串s的内容也不发生改变。

6.切割

public String[] split(String regex)

将一个字符串按照指定的分隔符分隔,返回分隔后的字符串数组

public class SplitDemo{
public static void main (String[] args) {

String date = "2008/09/10";
String[ ] dateAfterSplit= new String[3];
dateAfterSplit=date.split("/");         //以“/”作为分隔符来分割date字符串,并把结果放入3个字符串中。

for(int i=0;i<dateAfterSplit.length;i++)
System.out.print(dateAfterSplit[i]+" ");
}
}

运行结果:2008 09 10          //结果为分割后的3个字符串


7.字串

该方法的作用是取字符串中的“子串”,所谓“子串”即字符串中的一部分。例如“23”是字符串“123”的子串。

字符串“123”的子串一共有6个:”1”、”2”、”3”、”12”、”23”、”123”。而”32”不是字符串”123”的子串。

String s = “Test”;
String s1 = s.substring(2);//指从<span style="font-family: Arial, Helvetica, sans-serif;">索引值为2(包括)以后的所有字符作为子串</span>

//输出结果为  <span style="font-family: Arial, Helvetica, sans-serif;">st</span>
<span style="white-space:pre">	</span>//则该代码的作用是取字符串s中,则字符串s1的值是””。
<span style="white-space:pre">	</span>如果数字的值和字符串的长度相同,则返回空字符串。例如:
String s = “Test”;
String s1 = s.substring(4);
//则字符串s1的值是””。
String s = “TestString”;
String s1 = s.substring(2,5);//<span style="font-family: Arial, Helvetica, sans-serif;">从索引值2(包括)开始,到索引值5(不包括)的部分作为子串</span>
<span style="white-space:pre">	</span>//输出结果是  <span style="font-family: Arial, Helvetica, sans-serif;">stS</span>

<span style="white-space:pre">		</span>//下面是一个简单的应用代码,该代码的作用是输出任意一个字符串的所有子串。代码如下:
String s = “子串示例”;
int len = s.length(); //获得字符串长度
for(int begin = 0;begin < len – 1;begin++){ //起始索引值
for(int end = begin + 1;end <= len;end++){ //结束索引值
System.out.println(s.substring(begin,end));
}
}
/*在该代码中,循环变量begin代表需要获得的子串的起始索引值,其变化的区间从第一个字符的索引值0到倒数第二个字符串的索引值len -2,而end代表需要获得的子串的结束索引值,其变化的区间从起始索引值的后续一个到字符串长度。通过循环的嵌套,可以遍历字符串中的所有子串。*/


8.转换 去除两端空格 比较

String toLowerCase() :将字符串转换成小写。

String toUpperCase() :将字符串转换成大写。

public String trim()返回该字符串去掉开头和结尾空格后的字符串

int compareTo(String anotherString) :当前String对象与anotherString比较。相等关系返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差。

int compareTo(Object o) :如果o是String对象,和2的功能一样;否则抛出ClassCastException异常。

<span style="white-space:pre">		</span>String s1 = new String("abcdefghijklmn");
String s2 = new String("abcdefghij");
String s3 = new String("abcdefghijalmn");
System.out.println("s1.compareTo(s2): " + s1.compareTo(s2) ); //返回长度差
System.out.println("s1.compareTo(s3): " + s1.compareTo(s3) ); //返回'k'-'a'的差
//  结果为:s1.compareTo(s2): 4
//           s1.compareTo(s3): 10


9.连接

concat方法

该方法的作用是进行字符串的连接,将两个字符串连接以后形成一个新的字符串。例如:

<span style="white-space:pre">				</span>   String s = “abc”;
String s1 = “def”;
String s2 = s.concat(s1);
//则连接以后生成的新字符串s2的值是”abcdef”,而字符串s和s1的值不发生改变。如果需要连接多个字符串,可以使用如下方法:
String s = “abc”;
String s1 = “def”;
String s2 = “1234”;
String s3 = s.concat(s1).concat(s2);
//则生成的新字符串s3的值为”abcdef1234”。
//其实在实际使用时,语法上提供了一种更简单的形式,就是使用“+”进行字符串的连接。例如:
String s = “abc” + “1234”;


而且使用“+”进行连接,不仅可以连接字符串,也可以连接其他类型。但是要求进行连接时至少有一个参与连接的内容是字符串类型。而且“+”匹配的顺序是从左向右,如果两边连接的内容都是基本数字类型则按照加法运算,如果参与连接的内容有一个是字符串才按照字符串进行连接。

int a = 10;
String s = “123” + a + 5;
<span style="white-space:pre">	</span>//则连接以后字符串s的值是“123105”,计算的过程为首先连接字符串”123”和变量a的值,生成字符串”12310”,然后使用该字符串再和数字5进行连接生成最终的结果。
而如下代码:
int a = 10;
String s = a + 5 + “123”;
则连接以后字符串s的值是”15123”,计算的过程为首先计算a和数字5,由于都是数字型则进行加法运算或者数字值15,然后再使用数字值15和字符串”123”进行连接获得最终的结果。
而下面的连接代码是错误的:
int a = 12;
String s = a + 5 + ‘s’;
因为参与连接的没有一个字符串,则计算出来的结果是数字值,在赋值时无法将一个数字值赋值给字符串s。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: