星期四, 十一月 05, 2015 16:18:52
一.创建字符串
在java中用String类的构造方法来创建字符串变量。
----1.String()
一个String对象,可表示一个空字符序列。
使用String()方法初始化一个新创建的String对象
String s = new String();
二.字符串的操作
----1.字符串连接
a.多个字符串的连接
代码案例:
package day05;
public class TestString {
public static void main(String[] args) {
/*字符串连接用+*/
int m = 20;
String s1 = new String("hello");
String s2 = new String("word");
/*String s = ""+s1+s2;*/
System.out.println("m先转换为字符串-->连接"+m+s1+s2);
}
}
运行结果:
m先转换为字符串-->连接20helloword
----2.连接其他数据类型
当其他数据类型与字符串相连时会自动将其转换成字符串类型,然后进行连接。
----3.获取字符串信息
字符串变量是一个对象,可以通过相应方法获取字符串的有效信息,如获取字符串的长度、获取指定字符的索引位置等。
----1.获取字符串的长度
----2.获取指定字符串的索引位置,首次出现的str.indexOf(int ch)
&最后一次出现的lastIndexOf(int ch)
----获取指定索引位置的字符
代码案例:
package day05;
public class TestString {
public static void main(String[] args) {
/*获取字符的指定的索引位置indexOf(int ch)
* lastIndexOflastIndexOf*/
String s = new String("hwxzwkf");
int loc = s.indexOf('w');
int loc2 = s.lastIndexOf('w');
/*charAt(int index)*/
char m = s.charAt(1);
System.out.println("w在hwxzkf中首次出现的位置="+loc);
System.out.println("w在hwxzkf中last出现的位置="+loc2);
System.out.print("索引位置为1的字符为"+m);
}
}
运行结果:
w在hwxzkf中首次出现的位置=1
w在hwxzkf中last出现的位置=4
索引位置为1的字符为w
----4.去掉字符串的空格
---去掉字符串中的空格有2种,1.去除字符串的前导、尾部空格,2.去除字符串中的所有空格,可以用不同方法实现。
1.trim()进行去除字符串的前导、尾部空格,
2.replaceAll(String regex,
String replacement),去除字符串中的所有空格。
http://blog.csdn.net/zhangjg_blog/article/details/18319521
String是不可以改变解释~~
-----在Java中不可能直接操作对象本身,所有的对象都由一个引用指向,必须通过这个引用才能访问对象本身,
包括获取成员变量的值,改变对象的成员变量,调用对象的方法等。
-----也就是说,s只是一个引用,它指向了一个具体的对象,当s=“123456”; 这句代码执行过之后,又创建了一个新的对象“123456”, 而引用s重新指 向了这个心的对象,原来的对象“ABCabc”还在内存中存在,并没有改变。
-----原值在内存中还是在的;新的赋值只是将新的数据在内存中新生成,将s重新进行了指向。
代码案例:
package day05;
public class TestString {
public static void main(String[] args) {
String s = " J ava ";
System.out.println("字符串中含空格的长度="+s.length());
System.out.println("字符串中使用trim去除前后空格后的长度,中间的空格未去除"+s.trim().length());
System.out.println(s=s.trim());
/*public String replaceAll(String regex,
String replacement)*/
/*s.replaceAll(" ", "");*/
System.out.println("原s的指向="+s);
System.out.println("s的重新指向="+s.replaceAll(" ", ""));
}
}
运行结果:
字符串中含空格的长度=8
字符串中使用trim去除前后空格后的长度,中间的空格未去除5
J ava
原s的指向=J ava
s的重新指向=Java
----5.字符串替换
----replace(char oldChar,char newChar)
该方法用户替换所有与指定字符串相匹配的字符串
----replaceFirst(String regex,String replacement)
该方法用于替换第一个出现的指定的字符串,而后面出现的指定字符串则不会被替换
代码案例:
package day05;
public class TestString {
public static void main(String[] args) {
/*5.字符串替换public String replace(char oldChar,
char newChar)*/
String a = new String("bad bad girl");
a = a.replace("bad", "good");
System.out.println("repalce使用,a的新指向"+a);
/*public String replaceFirst(String regex,
String replacement)
参数:
regex - the regular expression to which this string is to be matched
replacement - the string to be substituted for the first match*/
String b = new String("bad bad girl");
b = b.replaceFirst("bad", "good");
System.out.println("replaceFirst使用,b的新指向"+b);
}
}
运行结果:
repalce使用,a的新指向good good girl
replaceFirst使用,b的新指向good bad girl
星期四, 十一月 05, 2015 19:54:50
星期五, 十一月 06, 2015 09:43:25
----6.判断字符串
6.1 判断字符串是否相等
----判断字符串是否相等equals()区分大小写,相同的字符和长度,则判等
---- 判断字符串是否相等,忽略大小写equalsIgnoreCase()
注意:
比较运算符"=="比较的是内存位置,不适宜拿来比较字符串,但整型等可以用比较运算符比较.
equals()方法比较的两个字符串内容必须完全一样;
equalsIgnoreCase()方法在或略大小写的情况下内容必须一样.
代码案例:
package day05;
public class TestStringEquals {
public static void main(String[] args) {
/* “==”比较的是内存中的位置,不适合比较字符串的大小
*
* 判断字符串是否相等equals()
* public boolean equals(Object anObject)
* 判断字符串是否相等,忽略大小写equalsIgnoreCase()
* public boolean equalsIgnoreCase(String anotherString)*/
String s1 = new String("ZhuhwJava");
String s2 = new String("Zhuhwjava");
boolean b1 = s1.equals(s2);
boolean b2 = s1.equalsIgnoreCase(s2);
System.out.println("equals用法="+b1);
System.out.print("equalsIgnoreCase用法="+b2);
}
}
运行结果:
equals用法=false
equalsIgnoreCase用法=true
6.2判断字符串的开始与结尾
6.2.1.以参数指定的字符串开始
格式:
str.startWith(String prefix);
6.2.2.以参数指定的字符串结尾
格式:
str.endWith(String suffix)
代码案例:
package day05;
public class TestString {
public static void main(String[] args) {
/*判断字符串以指定前缀开始public boolean startsWith(String prefix)
*判断字符串以指定后缀开始public boolean endsWith(String suffix)
* */
String s1 = new String("A0123456");
String s2 = new String("C0123456D");
boolean b1 = s1.startsWith("A0");
boolean b2 = s2.endsWith("66");
System.out.println("前缀startsWith()="+b1);//true
System.out.println("后缀endsWith()="+b2);//false
}
}
运行结果:
前缀startsWith()=true
后缀endsWith()=true
6.3 字母大小写切换
toLowerCase()和toUpperCase()方法
代码案例:
package day05;
public class TestString {
public static void main(String[] args) {
/*字符串大小写转换public String toLowerCase()
* 转换为大写public String toUpperCase()*/
String s1 = new String("ZhuHw");
System.out.println("原字符串="+s1);
System.out.println("转换为小写后="+s1.toLowerCase());
System.out.print("转换为大写后="+s1.toUpperCase());
}
}
运行结果:
原字符串=ZhuHw
转换为小写后=zhuhw
转换为大写后=ZHUHW
6.4.字符串拆分
split(String sign,int limit)方法
该方法根据给定的分隔符对字符串进行拆分,并限定拆分的份数.
语法:
str.split(String sign,int limit)
代码案例:
package day05;
public class TestString {
public static void main(String[] args) {
/*
字符串分割public String[] split(String regex),分割后返回数组类型*/
String s1 = new String("A,B,C,D");
System.out.println("原字符串为"+s1);
String s2[] = s1.split(",");
for(int i = 0; i<s2.length; i++){
System.out.print(s2[i]+"\t");
}
System.out.println();
System.out.println("--------------------------------");
/* str.split(String sign,int limit)并限定拆分的份数*/
String s3 = new String("A,B,C,D");
System.out.println("原字符串为"+s3);
String s4[] = s3.split(",",2);//拆成2份,验证成功
for(int i =0 ; i<s4.length;i++) {
System.out.print(s4[i]+"\t");
}
}
}
运行结果:
原字符串为A,B,C,D
A B C D
--------------------------------
原字符串为A,B,C,D
A B,C,D
12:37:32
星期日, 十一月 08, 2015 11:23:22
6.5根据指定分隔符把字符串分行
注意:
没有统一的对字符进行分割的符号,定义多个分隔符,使用符号"|"。
代码案例:
package day07;
public class StringSplit {
public static void main(String[] args) {
/*根据指定分隔符把字符串分行*/
String s1 = new String("爱是毕加索风格,尼罗河的月落,普赛的传说,青春向右;生活向左,我们都不是预知未来的使者");
String s2[] = s1.split(",|;");
for(int i = 0;i < s2.length; i++) {
System.out.println(s2[i]);
}
}
}
运行结果:
爱是毕加索风格
尼罗河的月落
普赛的传说
青春向右
生活向左
我们都不是预知未来的使者
6.6 判断字符串是否是字符串格式
package day07;
public class CheckNumber {
public static void main(String[] args) {
/*判断是否全是数字*/
String sa1 = new String("23544");
if (CheckNumber.IsNumber(sa1)) {
System.out.println("全是数字");
}else{
System.out.println("非全是数字");
}
}
public static boolean IsNumber(String sa1) {
char sa2[] = sa1.toCharArray();
/*public static boolean isDigit(int codePoint)*/
for(int i =0 ;i<sa2.length;i++) {
if(Character.isDigit(sa2[i])) {
}else{
return false;
}
}return true;
}
}
运行结果:
全是数字
7.格式化字符串
------格式化字符串是程序中经常用到的,主要包括日期格式化、时间格式化、日期/时间组合的格式化和常规类型格式化.
------7.1格式化方法
format()方法有一下两种重载形式
1.format(String format,Object...args)方法
该方法使用指定的格式字符串和参数,格式化后的新字符串使用本地默认的语言环境,返回格式化后的字符串。
format:格式化转换符
args:格式化字符串中格式说明符引用的参数。
如果还有格式说明符以外的参数,则忽略这些额外的参数。
此参数的书目是可变的,可以为0.
2.format(Local l,String format,Object...args)方法
Local:格式化话过程中要应用的语言环境。如果1位null,则不进行本地化
format:格式化转换符
args:格式化字符串中格式说明符引用的参数。
如果还有格式说明符以外的参数,则忽略这些额外的参数。
此参数的书目是可变的,可以为0.
----7.1.1 日期和时间字符格式化串
在应用程序设计中,经常需要显示时间和日期.
formate()方法通过给定的特殊转换字符作为参数来实现对日期和时间的格式化.
1.日期格式化
package day07;
import java.util.Date;
public class Formate {
public static void main(String[] args) {
/*日期格式化*/
/*实现当前日期信息易4位年份、月份全称、2位日期形式输出。*/
@SuppressWarnings("unused")
Date date = new Date();
String s1 = String.format("%tY",date);
System.out.println(s1);
String s2 = String.format("%tB",date);
System.out.println(s2);
String s3 = String.format("%td",date);
System.out.println(s3);
}
}
运行结果:
2015
十一月
08
2.时间格式化
例子:
实现将当前时间信息以2位小时。2位分钟数、2位秒钟数形式输出。
代码案例:
package day07;
import java.util.Date;
public class Formate {
public static void main(String[] args) {
/* 实现将当前时间信息以2位小时。2位分钟数、2位秒钟数形式输出。*/
Date date = new Date();
String d1 = String.format("%tH", date);
System.out.print(d1+":");
String d2 = String.format("%tM", date);
System.out.print(d2+":");
String d3 = String.format("%tS", date);
System.out.print(d3);
}
}
运行结果:
12:46:20
3.格式化常见的日期时间组合
例子:
在主方法中实现将当前日期时间的全部信息以及指定格式的日期输出。
代码案例:
package day07;
import java.util.Date;
public class DateAndTime {
public static void main(String[] args) {
/*在主方法中实现将当前日期时间的全部信息以及指定格式的日期输出。*/
Date date = new Date();
String dt1 = String.format("%tc", date);
System.out.println(dt1);
String dt2 = String.format("%tF", date);
System.out.println(dt2);
}
}
运行结果:
星期日 十一月 08 12:51:11 CST 2015
2015-11-08
----7.2.2 常规类型格式化
在程序设计过程中,经常需要对常规类型的数据进行格式化,
如格式化为整数、格式化为科学技术表示等。
在Java语言中可以使用常规类型的格式化转换字符来实现。
代码案例:
package day07;
import java.util.Date;
public class General {
public static void main(String[] args) {
/*实现不同数据类型到字符串的转换*/
String str1 = String.format("%d", 400/2);//10
String str2 = String.format("%b", 3>5);//boolean
String str3 = String.format("%x", 200);//16
System.out.println("400的一半是"+str1);
System.out.println("3>5正确吗?"+str2);
System.out.println("200的十六进制是"+str3);
}
}
运行结果:
400的一半是200
3>5正确吗?false
200的十六进制是c8
8.使用正则表达式
在程序设计过程中,经常需要对输入的数据格式进行检查,
这时就会用到正则表达式,匹配正则表达式则数据格式正确,
否则格式错误。
----8.1 判断是否符合正则表达式的方法
1.语法格式:
boolean matches(String regex)
regex:指定的正则表达式
返回值:返回值boolean类型
2.正则表达式的元字符
注意:
在正则表达式中,"."代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符“.”,必须使用转义字符“\”。
在主方法中实现使用正则表达式来判定的变量是否是合法的E-mail地址。
代码案例:
package day07;
import java.util.Date;
public class Judge {
public static void main(String[] args) {
/*在主方法中实现使用正则表达式来判定的变量是否是合法的E-mail地址。*/
String regex = "\\w{0,}\\@\\w{0,}\\.{1}\\w{0,}";
String str1 = "aaa@";
String str2 = "aaaa";
String str3 ="zhuhw_yzxe@163.com";
boolean b1 = str1.matches(regex);
boolean b2 = str2.matches(regex);
boolean b3 = str3.matches(regex);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
}
}
运行结果:
false
false
true
9.字符串生成器
J2SE5.0新增了可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率。
如果在程序中频繁的附加字符串,建议使用StringBuilder。
新建的StringBuilder初始容量是16个字符,可以自行指定初始长度。
例子:
验证字符串操作和字符串生成器操作的工作效率。
代码案例:
package day07;
import java.util.Date;
public class StringBuilderTest {
public static void main(String[] args) {
/*验证字符串操作和字符串生成器操作的工作效率.*/
String str = new String("");
long startTime = System.currentTimeMillis();
for(int i = 0;i < 10000; i++) {
str = str+i;
}
long endTime = System.currentTimeMillis();
long time = endTime - startTime;
System.out.println("String消耗的时间为"+time);
/*@SuppressWarnings("unused")*/
StringBuilder builder = new StringBuilder("");
startTime= System.currentTimeMillis();
for(int j = 0 ;j<10000;j++) {
builder.append(j);
}
endTime = System.currentTimeMillis();
time = endTime - startTime;
System.out.print("StringBuilder消耗的时间为"+time);
}
}
运行结果:
String消耗的时间为301
StringBuilder消耗的时间为2
若要使用StringBuider最后输出字符串结果,可使用toString()方法。
利用StringBuider可以动态的增加、删除、插入等对字符串的操作。
该类常用的方法:
1.append(content)
content表示要追加到字符串生成器中的内容。可以是任何类型的数据或者其他对象。
2.insert(int offset,arg)方法
位置+参数
3.delete(int start,int end)
API参考:
java.lang.StringBuider说明
星期日, 十一月 08, 2015 14:40:25