文章目录
8.1String类
String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用String类。
String类被定义位final类,String不能扩展,String类不可以有子类
8.11 构造String对象
又被称为字符串类
- 常量对象
String常量也是对象,是用双引号括起的字符序列 - String对象
可以使用String类声明对象并创建对象
String s=new String("we are studients");
String s1=new String("we are studients");
s!=s1返回true
对象无法输出String对象的实体,只能输出引用,也就是we are studients
String类的另外两个常用构造方法
char a[]={'a','b','c','d'}; String s=new String(a);
char a[]={'a','b','c','d'}; String s=new String(a,2,3);//包括3
- 引用String
String s1,s2;
s1="您好";
s2="您好";
s1==s2返回true
public class Example8_1 {
public static void main(String args[]) {
String s1,s2;
s1=new String("天道酬勤");
s2=new String("天道酬勤");
System.out.println(s1.equals(s2)); //输出结果是:true
System.out.println(s1==s2); //输出结果是:false
String s3,s4;
s3="勇者无敌";
s4="勇者无敌";
System.out.println(s3.equals(s4)); //输出结果是:true
System.out.println(s3==s4); //输出结果是:true
}
}
**疑问:为什么String you="you"是一个变量?**不是这个是变量,而是两个相加成为了一个变量
8.1.2字符串的并置
String对象可以用"+"进行并置运算
String you="you";
String hi="are";
String testone=you+hi;
**如果参与并置运算的String对象,只要有一个是变量,那么Java就会在动态区存放所得到所得到的新String对象的实体和引用。you+hi相当于new String()
8.1.3String类常用的方法
- public int length()
String中的length()获取一个String对象的字符序列长度 - public boolean equals(String s)
比较当前String对象的字符序列是否与参数s指定的String对象字符序列相同 - public boolean equalsIgnore-Case(String)
与equals相似,这个忽略大小写的问题 - public boolean startsWith(String s) \ \ public boolean endsWith(String s)
判断当前对象的字符串序列前缀//(后缀)是否参与指定的对象s字符序列 - public int compareTo(String s)方法
String对象调用该方法,按字典序与参数指定的String对象s的字符序列比较大小
如果相同 返回0 。 如果大于, 返回大于0 。如果小于,返回小于0。 - public int compareToIgnoreCase(String s)
- Arrays类中的sort Arrays.sort(b);
- public boolean contains(String s)
当前字符序列是否包含s - public int indexOf(String s)// public int lastIndexof(String s)
从前开始索引s第一次//(最后一次)出现的位置,成功时返回位置的数字信息,失败返回-1
indexOf(String str,int startpoint) startpoint指定检索开始的位置 - public String substring(int startpoint)
产生一个新的String对象,新的String对象的字符序列是复制当前String对象的字符序列中的startpoint位置至最后位置上的字符所得到的字符序列
substring(int start,int end) 从start开始到达end-1 - public String trim()
得到一个新的String对象,为当前String对象去掉前后空格
8.1.4字符串与基本数据的相互转化
java.lang包中的Integer类调用其类方法public static int parseInt(String s)可以将“数字”构成的字符序列转化为int型数据
Integer.parseInt(s) |
---|
Double.parseDouble(s) |
Long.parseLong(s) |
用String.valueof()将数字转化为String
public class Example8_4 {
public static void main(String args[]) {
double aver=0,sum=0,item=0;
boolean computable=true;
for(String s:args) {
try{ item=Double.parseDouble(s);
sum=sum+item;
}
catch(NumberFormatException e) {
System.out.println("您键入了非数字字符:"+e);
computable=false;
}
}
if(computable)
System.out.println("sum="+sum);
}
}
main方法中的参数args能接受用户从键盘输入的字符序列
8.1.5对象的字符串表示
使用一个public String toString()方法可以得到一个对象的字符串表示
8.1.6 字符串与字符数组、字节数组
String对象提供了将String对象的字符序列存放到数组的方法:public void getChars(int start,int end,char c[],int offset).
String对象调用getChars()方法将当前String对象的字符序列的一部分字符复制到参数c指定的数组中,将字符序列中从位置start到end-1位置上的字符复制到数组C中,并且从数组c的offset处开始存放这些字符。值得注意的是,必须保证数组c能容纳下要被复制的字符
另外还有一个public char[] toCharArray()将String对象的字符序列的全部字符存放在一个字符数组中
public byte[ ] getBytes() 方法使用平台默认的字符编码,将当前String对象的字符序列存放到字节数组中,并返回数组的引用
getBytes(String charsetName)可以指定字符编码,但是需要抛出UnsupportedEncodingException异常先
GB2312 中文是两个编码
字符串的加密算法
char [] p=password.toCharArray();
由此得到
c0=char(a0+p[0])…
8.17 正则表达式
String对象调用``public boolean matches(String regex)可以判断此时的String对象的字符序列是否与regex指定的正则表达式匹配
正则表达式可以用方括号括起来表示一个元字符,该元字符表示方括号中的任何字符
[a-zA-Z]代表英文字母中的任何一个
另外中括号中允许嵌、套中括号进行交并差运算
[a-d[m-p]] a-d或m-p中的任何
[a-z&&[def]] def中的任何一个
[a-f&&[^bc]]代表adef
字符 | 含义 |
---|---|
. | 任何字符 |
\d | 代表0-9的数字 |
\D | 代表任何非数字字符 |
\s | 代表空格类字符 |
\S | 代表非空格类字符 |
限定符
模式 | 意义 |
---|---|
X? | X出现0或1 |
X* | X出现0或多 |
X+ | X出现1或多 |
X{n} | X出现n次 |
字符串的替换
String str=replaceAll(String regex,String replacement)
不改变当前序列
String split(String regex)
Scanner类
可以用于解析
通过调用方法
useDelimiter(正则表达式);
默认用空白字符作为分隔,;
StringBuffer类
String对象的字符序列是不可能改变的
StringBuffer则允许发生改变
构造方法
StringBuffer():默认一开始是16
StringBuffer(int size):自己设定长度
StringBuffer(String s):s的长度再加16
常用方法
StringBuffer append(String s//int n//Object o)
public char charAt(int n)得到第n个字符
public setCharAt(int n,char ch)讲讲位置n的字符用ch替换
StringBuffer insert(int index,String str) 将str插入指定位置
public StringBuffer reverse()
StringBuffer delete(int start,int end)从start到end-1的被删除
StringBuffer replace(int start,int end,String str)
Date类与Calendar类
Date类
- 使用无参数构造方法
Date nowTime=new Date()
- 使用带参数的构造方法
Date date1=new Date(1000)
1000是毫秒单位,指当前时间的往后1000毫秒,如果是负数就往前1000毫秒
Calendar类
Calendar calendar=Calendar.getInstance();
初始化一个日历对象
数字格式化
format
基本与C的printf()相似用法
符号 | 意义 |
---|---|
%d | 转化为10进制整数 |
%o | 转化为8进制整数 |
%x | 转化为小写16进制 |
%X | 转化为大写16进制 |
%f | 十进制浮点数,小数保留6位 |
%e//(%E) | 科学计数法,区别在于大小写 |
修饰符
%+(格式化符号)强行加上符号+
%,(格式化符号)数字按千分位