1、字符与字符串
很多编程语言都会用字符数组描述字符串,Java也有类似概念,String类中有一系列字符相关的操作方法:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String(char[] value) | 构造 | 将全部的字符数组作为String的内容 |
2 | public String(char[] value,intt offset,int count) | 构造 | 将部分字符数组变为字符串,设置字符数组的开始索引与使用个数 |
3 | public char charAt(int index) | 普通 | 返回指定索引位置的字符 |
4 | public char[] toCharArray() | 普通 | 将字符串以字符数组的形式返回 |
【举例】:字符串与字符数组间的转换
代码语言:javascript复制 String str = "hello";
char[] data = str.toCharArray();
for(int x=0;x<data.length;x ){
Log.d("TAG",data[x] "、");
}
字符串转换为字符数组后,可针对其中每一个字符进行操作,比如将小写字母转换为大写字母:
代码语言:javascript复制 String str = "helloworld";
char[] data = str.toCharArray();
for(int x=0;x<data.length;x ){
data[x] -=32; //变成大写
}
Log.d("TAG",new String(data));
Log.d("TAG",new String(data,5,5));
【举例】:判断某一字符串是否全部由数字组成:将字符串转换为字符数组,便于进行每个字符的判断其范围是否在'0'~'9'之间;
代码语言:javascript复制 public static boolean isNumber(String str){
char[] data = str.toCharArray();
for(int x=0;x<data.length;x ){
if(data[x]<'0' || data[x]>'9'){
return false;
}
}
return true;
}
2、字节与字符串
字节与字符串的转换,在实际开发中较多,以下几个方法:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String(byte[] bytes) | 构造 | 将全部的字节数组变为字符串 |
2 | public String(byte[] bytes,intt offset,int count) | 构造 | 将部分字节数组变为字符串,设置字节数组的开始索引与使用个数 |
3 | public byte[] getBytes() | 普通 | 将字符串变为字节数组 |
4 | public byte[] getBytes(String charsetName) throws UnsupportedEncodingException | 普通 | 编码转换 |
【举例】:利用字节数组实现小写字母变换为大写字母
代码语言:javascript复制 String str = "hello";
byte[] data = str.getBytes();
for(int x=0;x<data.length;x ){
data[x] -=32;
}
System.out.println(new String(data));
以上代码只是针对字节的简单操作,实际开发中字节的使用通常结合IO、网络进行的。
3、字符串比较
由前面几个博文可知,字符串比较方法有equals方法,此方法是区分大小写的比较,Java中针对字符串比较的方法有:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public boolean equals(Object anObject) | 普通 | 区分大小写的字符串比较(是否相等) |
2 | public boolean equalsIgnoreCase(String anotherString) | 普通 | 不区分大小的字符串比较(是否相等)可用于验证码 |
3 | public int compareTo(String anotherString) | 普通 | 比较字符串大小 |
4 | public int compareToIgnoreCase(String str) | 普通 | 不区分大小的比较字符串大小 |
compareTo方法最为重要,如 A.compareTo(B)返回结果有三种:
- >0: 字符串A>B;
- <0:字符串A<B;
- =0:字符串A=B;
应用比较简单,不再举例喽。
4、字符串查找
从一个完整的字符串中查找子字符串,有以下方法:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public boolean contains(CharSequence s) | 普通 | 判断某一个字符串是否存在 |
2 | public int indexOf(String str) | 普通 | 取得某一个字符串的索引位置,找不到返回-1 |
3 | public int indexOf(String str,int fromIndex) | 普通 | 从指定索引位置开始检索子字符串位置,找不到就返回-1 |
4 | public int lastIndexOf(String str) | 普通 | 从后向前查找指定字符串,找不到返回-1 |
5 | public int lastIndexOf(String str,int fromIndex) | 普通 | 从指定位置,由后向前查找指定字符串,找不到返回-1 |
6 | public boolean startsWith(String prefix) | 普通 | 判断是否以某个字符串开头 |
7 | public boolean startsWith(String prefix, int toffset) | 普通 | 从指定位置判断是否以某个字符串开头 |
8 | public boolean endsWith(String suffix) | 普通 | 是否以某个字符串结尾 |
要查找中间的内容,基本都是使用contains()方法,但是它只能查找,不能判断位置,JDK1.5以后出现的方法,1.5之前只能用indexOf()方法。
startsWith()方法、endsWith()方法在开发中比较实用。
5、字符串截取
将完整字符串 截取子字符串,方法如下:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String substring(int beginIndex) | 普通 | 从指定索引位置(包含该位置的字符)截取至末尾 |
2 | public String substring(int beginIndex, int endIndex) | 普通 | 截取指定索引范围内的字符串(包含起始索引,不包含end索引) |
实际开发这种截取操作很常用,比较简单,不再举例赘述了。
6、字符串替换
将指定字符串替换为其他内容,如下方法:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String replaceAll(String regex,String replacement) | 普通 | 字符串的全部替换 |
2 | public String replaceFirst(String regex,String replacement) | 普通 | 替换第一个内容 |
【举例】:观察替换操作
代码语言:javascript复制 String str = "hello";
System.out.println(str.replaceAll("l","L"));//输出heLLo
System.out.println(str.replaceFirst("l","L"));//输出heLlo
实际开发中,利用替换操作可以消除数据中的全部空格:
代码语言:javascript复制 String str = "h e llo";
System.out.println(str.replaceAll(" ",""));//输出hello
7、字符串拆分
将完整字符串根据指定内容进行拆分,拆分后的结果为字符串数组,方法如下:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String[] split(String regex) | 普通 | 全部拆分 |
2 | public String[] split(String regex,int limit) | 普通 | 部分拆分 |
【举例】:观察全部拆分
代码语言:javascript复制 String str = "hello world";
String[] data = str.split(" ");
for (int i=0;i<data.length;i ){
System.out.println(data[i]);
}
【举例】:观察部分拆分
代码语言:javascript复制 String str = "hello world nice china";
String[] data = str.split(" ",2);
for (int i=0;i<data.length;i ){
System.out.println(data[i]);
}
【举例】:拆分IP地址
代码语言:javascript复制 String str = "192.168.1.1";
String[] data = str.split(".");
for (int i=0;i<data.length;i ){
System.out.println(data[i]);
}
可以发现,按“.”拆分无结果返回,不能直接按"."拆分,因为其属于正则表达式的范畴。所以,需要进行转义,使用"\"。
代码语言:javascript复制 String str = "192.168.1.1";
String[] data = str.split("\.");
for (int i=0;i<data.length;i ){
System.out.println(data[i]);
}
8、其他操作方法
除以上方法外,还有一些小的操作方法:
序号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public int length() | 普通 | 取得字符串的长度(中英文长度一致,方便开发) 注意,String中使用的是方法,数组中使用的是属性 |
2 | public boolean isEmpty() | 普通 | 判断是否为空(""),若是返回true,否则返回false |
3 | public String toUpperCase() | 普通 | 针对字母,转大写 |
4 | public String toLowerCase() | 普通 | 针对字母,转小写 |
5 | public String trim() | 普通 | 去掉左右空格,不去中间字符 |
6 | public String concat(String str) | 普通 | 字符串的连接(基本不会使用,与 相同) |
【举例】:观察trim
代码语言:javascript复制 String str = " h ello ";
System.out.println(str.trim());
【举例】很遗憾,String类中没有提供initcap()函数的功能,用于首字母大写,开发中很常用,我们自己实现
代码语言:javascript复制 public static String initCap(String str){
if(str==null || str.length()==0){
return str;
}
return str.substring(0,1).toUpperCase() str.substring(1);
}