java将String类定义为final类,所以该类无子类
String常量也是对象,即字符串是String常量,被放入常量池中,受常量池的保护其中的数据在程序运行期间不允许被改变。
String s = new String("别骂了别骂了");
String t = new String("别骂了别骂了");
凡new运算符构造的对象都不再常量池中,所以s和t虽然实体相同,但是引用不同。
用户无法输出String对象的引用,输出的是该对象的实体,即字符串
构造方法:
String s = new String("别骂了");
//等同于
char a[] - {
'别','骂','了'};
String s = new String(a);
从字符数组中的索引startIndex开始取count个字符
String常量是对象,因此可以把String常量的引用赋值给一个String对象
String a,b;
a = "java";
b = "java";
//此处a和b具有相同的引用,则具有相同的实体
a==b;//此处为true
String a,b,c;
a = "ja";
b = "va";
c=a+b;//此处c为"java"
int length();
boolean equals(String s);//判断是否与s相等
boolean startsWith(String s);//判断是够以s开始
int comparaTo(String s);//比较字符序列的大小,返回差值
boolean contains(String s);//是否包含s
int indexOf(String s);//找到该字符串第一次出现的位置(未找到返回-1)
int lastIndexOf(String s);//找到该字符串最后一次出现的位置(未找到返回-1)
int indexOf(String s,int startpoint);//从startpoint开始找,找到该字符串第一次出现的位置(未找到返回-1)
String substring(int start,int end);//获得新的String对象,从start到end。end不写表示复制到末尾
String trim();//取掉前后空格得到新的String对象
即重写toString方法,也可以用super.toString调用object的toString方法。
字符串与字符数组
String s;
char[] a,c;
s.getChars(11,15,a,0);//将s从11到15的字符复制给a
c = s.toCharArray();//将s所有实体转换为字符数组存入c
字符串与字节数组
String s;
byte[] a;
a = s.getBytes();//将s中的实体存入字节数组a中
String c = new String(a,6,2);//将字节数组中的第6位开始取两位,返回新的字符串(英文占1个字节,中文两个)
字符串的加密算法
//加密
String encrypt(String sourceString,String password){
char[] p = password.toCharArray();
int n = p.length;
char[] c = sourceString.toCharArray();
int m = c.length;
for(int k=0;k<m;k++){
int mima = c[k] + p[k%n];
c[k] = (char)mima;
}
return new String(c);
}
正则表达式
特殊意义的字符:正则表达式中的元字符
[abc]:代表abc中的任何一个;
[^abc]:代表除了abc以外的任何字符;
[a-zA-Z]:代表英文字母的任何一个;
[a-d]:代表a~d的任何一个;
[[]]:并【或】;
[&&[]]:交【且】;
[&&[^]]:差;
待限定修饰符的模式 | 意义 |
---|---|
[]? | []出现0次或一次 |
[]* | []出现0次或多次 |
[]+ | []出现1次或多次 |
字符串替换
String str = "12hello567bird".replaceAll("[a-zA-Z]+","你好");
//结果为:12你好567你好
//repaceAll()返回新的,不改变原件
字符串分解
String regex = "\\D+";//表示匹配任何非数字字符序列
String difitWord[] = str.split(regex);//将非数字字符作为分隔符标记分解出str的字符序列中的单词
不适用正则表达式分解String对象的字符串
StringTokenizer fenxi = new StringTokenizer("you are welcome");//使用默认分割标记
StringTokenizer fenxi = new StringTokenizer("you*#are*#welcome","*#");//使用自定义分割标记
while(fenxi.hasMoreTokens()){
System.out.print(fenxi.nextToken);
}
String xxx = "电费78水费88煤气费99";
Scanner scanner = new Scanner(xxx);//创建一个Scanner对象
scanner.useDelimiter("[^0123456789.]+");//设置分隔符
int sum;
while(scanner.hasNext){
//判断是否有下一个
sum += sannner.nextInt;
}
Scanner scanner = new Scanner(System.in);
char key = ' ';
boolean loop = true;
while (loop){
key = scanner.next().charAt(0);//接收一个字符
case 'a':
System.out.println("输入一个数:");
nt value = scanner.nextInt();
break;
case 'e':
scanner.close();
loop = false;
System.out.println("程序退出");
break;
}
可自动调解大小的字符序列
三个构造方法:
StringBuffer();//初始容量大小为16个字符
StringBuffer(int size);//指定给该对象设定初始容量的大小
StringBuffer(String s);//在s的容量基础上再加16
//当容量不够时,该对象的容量会自动增加
方法:
StringBuffer s = new StringBuffer();
s.append(String str);//添加str
s.charAt(int n);//得到序列索引为n的字符
s.setCharAt(int n,char ch);//将n处的字符替换为ch
s.insert(int index,String str);//将参数str指定的字符序列插入到参数index指定的位置
s.reverse();//翻转字符序列
s.delete(int startIndex,int endIndex);//从当前字符序列中删除一个子字符序列(从start到end),并返回当前对象的引用
s.replace(int startIndex,int endIndex,String str);//将从start到end的序列换成str,返回当前对象的引用
//时间显示
Date nowTime = new Date();
System.out.println(nowTime);
//格式化显示
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(date);
Calendar calendar = Calendar.getInstance();//初始化一个日历对象
calendar.get(Calendar.Month);//返回月份的整数
calendar.get(Calendar.DAY_OF_WEEK);//返回星期几的整数
calendar.getTimeInMillis();//返回毫秒计时
public static long abs(double a); //返回a的绝对值。
public static double max(double a,double b); //返回a、b的最大值。
public static double min(double a,double b); //返回a、b的最小值。
public static double random(); //产生一个0到1之间的随机数(不包括0和1)。
public static double pow(double a,double b); //返回a的b次幂。
public static double sqrt(double a); //返回a的平方根。
public static double log(double a); //返回a的对数。
public static double sin(double a); //返回正弦值。
public static double asin(double a); //返回反正弦值。
public BigInteger add(BigInteger val); //返回当前大整数对象与参数指定的大整数对象的和。
public BigInteger subtract(BigInteger val);//返回当前大整数对象与参数指定的大整数对象的差。
public BigInteger multiply(BigInteger val);//返回当前大整数对象与参数指定的大整数对象的积。
public BigInteger divide(BigInteger val);//返回当前大整数对象与参数指定的大整数对象的商。
public BigInteger remainder(BigInteger val);//返回当前大整数对象与参数指定的大整数对象的余。
public int compareTo(BigInteger val); //返回当前大整数对象与参数指定的大整数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等于参数指定的大整数。
public BigInteger pow(int a); //返回当前大整数对象的a次幂。
public String toString(); //返回当前大整数对象十进制的字符串表示。
public String toString(int p); //返回当前大整数对象p进制的字符串表示。
//构造方法:
public Random();
public Random(long seed);//使用参数seek指定的种子创建一个Random对象
//随机数生成器random调用不带参数的nextInt()方法:
Random random=new Random();
random.nextInt();
//返回一个0至n之间(包括0,但不包括n)的随机数 随机数生成器random调用带参数的nextInt(int m)方法(参数m必须取正整数值)例如:
random.nextInt(100);//返回一个0至100之间的随机整数(包括0,但不包括100)。
//随机得到true和false两个表示真和假的boolean值,随机数生成器random调用nextBoolean()方法,例如:
random.nextBoolean();//返回一个随机boolean值。
格式化模式
format方法中的“格式化模式”是一个用双引号括起的字符序列(字符串),该字符序列中的字符由格式符和普通字符所构成。
例如:"输出结果%d,%f,%d"中的%d和%f是格式符号 .
format方法返回的字符串就是“格式化模式”中的格式符被替换为它得到的格式化结果后的字符串。
例如:String s = String.format(“%.2f”,3.141592);那么s就是“3.14”.
值列表
format方法中的“值列表”是用逗号分隔的变量、常量或表达式。 例如:
String s=format("%d元%0.3f公斤%d台",888,999.777666,123); 那么,s就是"888元999.778公斤123台"。
格式化顺序
format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样。
例如,假设int型变量x和double型变量y的值分别是888和3.1415926,
那么对于String s = format(“从左向右:%d,%.3f,%d”,x,y,100);
字符串s就是:从左向右:888,3.142,100
格式符
%d:格式化为十进制
%o:格式化为八进制
%x:格式化为小写的十六进制整数
%X:格式化为大写的十六进制整数
修饰符
+:强制添加上+号
,:按千分组
数据的宽度
%8d:宽度为8,右对齐
%-8d:宽度为8,左对齐
%08d:宽度为8,右对齐,0来填充
格式符
%f:将值格式化为十进制浮点数,小数保留6位
%e:将值格式化位科学计数法的十进制浮点数
修饰符
+:格式化正数时,强制加上+
,:整数部分按千分组
限制小数位数与数据的宽度
%.nf:限制小数的位数
如:%.3f:保留三位小数
%nf:数据的宽度n,右对齐,空格填充
%-nf:数据宽度为n,左对齐,空格填充
%0nf:0填充,宽度为n,右对齐
单选:
1、String 类是final 类,不可以有子类。
2、int m =Short.parseShort(“567”);
3、程序标注的【代码】的输出结果是bird。
4、程序标注的【代码】的输出结果是你好。
5、无编译错误,在命令行执行程序:“java E I love this game”,程序输出this。
6、无编译错误,在命令行执行程序:“java E go on”,运行异常:ArrayIndexOutOfBoundsException: 2。
7、“9dog”.matches("\ddog")的值是true。12hello567 .replaceAll( [123456789]+ , @ )返回的字符串是@hello@。"\hello\n"是正确的字符串常量。
8、"\tea"是正确的字符串常量。"'hello"是正确的字符串常量。"\natural"是正确的字符串常量。
9、表达式"java".equals(“java”)的值是true。表达式"Bird".compareTo(“Bird fly”)的值是负数。表达式"I love you".contains(“you”)的值是true。
10、default966 .matches( [^bc]+[789]{1}[6]{2} )的值是true。表达式"RedBird".indexOf(“Bird”)的值是3。表达式"RedBird".indexOf(“Cat”)的值是-1。
11、Integer.parseInt(“12.9”);会触发NumberFormatException异常。表达式"bird".contentEquals(“bird”)的值是true。表达式"Bird" == "bird"的值是false。
12、表达式 3.14 .matches( [0-9]+[.]{1}[0-9]+ )的值是true。表达式"220301200210250286".startsWith(“2203”)的值是true。表达式"220301200210250286".endsWith(“286”)的值是true。
13、程序标注的【代码】的输出结果是bird。
14、程序标注的【代码】的输出结果是:你好。
15、 String str2 = new String (a); //B错误代码:不能存放数组
16、 int index = str.indexof(“BC”); //A错误代码:O要大写
17、 boolean boo= str.startWith(“Java”); //D错误代码:startsWith
18、int m = “java”.compareto(“java”); //C错误代码:To的T大写
19、 String s = str.subString(0,3); //C错误代码:subsString
20、 boolean bn = str.equal(""); //A错误代码:equals
21、 int m = str.equals(""); //A错误代码:boolean不能转换为int
22、 int n = s.length ; //D错误代码length()
多选:
1、String 类是final 类,不可以有子类。String 类在java.lang中
2、错误:String 类在java.util包中。“abc”=="abc"的值是false .“abc”.equals(“Abc”)的值是true
3、int m =Short.parseShort(“567”);
4、错误:int m =Float.parseFloat(“567”);byte m =Integer.parseInt(“2”);float m =Float.parseDouble(“2.9”);
5、“9dog”.matches("\ddog")的值是true。12hello567 .replaceAll( [123456789]+ , @ )返回的字符串是@hello@。"\hello\n"是正确的字符串常量。
6、错误:new Date(1000)对象含有的时间是公元后1000小时的时间
7、"\tea"是正确的字符串常量。"'hello"是正确的字符串常量。"\natural"是正确的字符串常量。
8、错误:"\hello"是正确的字符串常量。
9、default966 .matches( [^bc]+[789]{1}[6]{2} )的值是true。表达式"RedBird".indexOf(“Bird”)的值是3。表达式"RedBird".indexOf(“Cat”)的值是-1。
10、错误:表达式"RedBird".lastIndexOf(“Bird”)的值是4。
11、Integer.parseInt(“12.9”);会触发NumberFormatException异常。表达式"bird".contentEquals(“bird”)的值是true。表达式"Bird" == "bird"的值是false。
12、错误:表达式"Bird".equals(“bird”)的值是true。
13、表达式 3.14 .matches( [0-9]+[.]{1}[0-9]+ )的值是true。表达式"220301200210250286".startsWith(“2203”)的值是true。表达式"220301200210250286".endsWith(“286”)的值是true。
14、错误:表达式"D:/java/book".lastIndexOf("/")的值是8。
15、String对象的字符序列是不可修改的。StringBuffer对象的字符序列是可修改的。表达式"\t\nABC".length()的值是5。random.nextInt(100);//返回一个0至100之间的随机整数(包括0,但不包括100)。
16、错误:Random对象的nextInt(int n)方法随机返回[0,n]之间的一个整数
17、表达式 java88_hello_99 .matches( [a-zA-Z|0-9|_]+ )的值是true.表达式 abcdef你好 .matches( [0-9.]+ )的值是true.
18、错误:表达式 hello*? .matches( [a-zA-Z|0-9|_]+ )的值是true。表达式 hello .matches( [0-9.]+ )的值是false.