字符与字符串
很多的语言之中都是利用了字符数组的概念来描述字符串的信息,这一点很多语言都用到了。
No | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String (char [] value) | 构造 | 将字符数组转换为字符串 |
2 | public String (char [] value,int offset,int count) | 构造 | 将部分字符数组转换为字符串 |
3 | public char charAt(int index) | 普通 | 返回制定索引的字符串 |
4 | public char[] toCharArray() | 普通 | 将字符串以字符数组形式返回 |
范例:取出制定索引的字符
public class StringDemo{
public static void main(String []args){
String str = "hello";
char c = str.charAt(0);
System.out.println(c);
}
}
范例:将字符串变成字符数组
public class StringDemo{
public static void main(String []args){
String str = "hello";
char[] charArray = str.toCharArray();
}
}
范例:将字符串转大写
public class StringDemo{
public static void main(String []args){
String str = "hello";
char[] charArray = str.toCharArray();
for(int i = 0;i < charArray.length; i ++){
//小写变为大写,只需要减去32即可
charArray[i] -= 32;
}
System.out.println(new String(charArray));
System.out.println(new String(charArray,1,2));
}
}
范例:给定一个字符串,要求判断是否由数字组成
public class StringDemo{
public static void main(String [] args){
String str = "123321";
if(isNumber(str)){
System.out.println("字符串由数组组成");
}else{
System.out.println("字符串不是由数组组成");
}
}
// 判断字符串是否为数组组成,是返回true,否返回false
public static boolean isNumber(String temp){
char [] data = temp.toCharArray();
for(int x = 0; x <data.length;x++){
if(data[x] > '9' || data[x] < '0'){
return false;
}
}
return true;
}
}
字节与字符串
字节使用byte描述,使用字节一般主要用于数据的传输或者是编码的转换的时候使用,而在String里面,就提供了将字符串变为字节数组的操作,目的就是为了传输以及编码转换。
No | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String (byte[] bytes) | 构造 | 将全部的字节数组变为字符串 |
2 | public Strint(byte[] bytes,int offset,int length) | 构造 | 将部分字节数组变为字符串 |
3 | public byte[] getBytes() | 普通 | 将字符串变为字节数组 |
4 | public byte[] getBytes(String chasetName) throws UnsupportedEncodingException | 普通 | 进行编码转换 |
范例:观察字符串与字节数组的转换
public class StringDemo{
public static void main(String []args){
String str = "HelloWorld";
byte []data = str.getBytes();//将字符串变为字节数组
for(int i = 0 ; i < data.length ; i++){
data[x] -= 32;//变为大写
}
System.out.println(new String(data));
System.out.println(new String(data,5,5));
}
}
因为现在操作的是因为字母,所以感觉与字符类似,
在以后讲解IO操作的时候会牵连到这种字节数组的操作,会涉及到乱码转码的问题
字符串的比较
如果要进行字符串内容相等的判断使用equals(),但是在String类里面定义的比较判断不止这一个。
】
No | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public boolean equals(String object) | 普通 | 进行相等的判断,它区分大小写 |
2 | public boolean equalsIgnoreCase(String temp) | 普通 | 进行相等的判断,不区分大小写 |
3 | public int compareTo(String anotherString) | 普通 | 判断两个字符串的大小(按照字符编码比较),此方法的返回值有三种结果: = 0:表示要比较的两个字符串内容相等;:>0:表示大于的结果;<0:表示小于的结果 |
4 | |||
5 | |||
6 |
范例:观察comparaTo(String temp)方法
public class StringDemo{
public static void main(String []args){
String stra = "hello";
String strb = "HELLO";
System.out.println(stra.comparaTo(strb));
//32,结果是 stra > strb
}
}
现在只有String类的对象才具有大小的关系判断。
字符串查找
从一个完整的字符串之中要判断某一个子字符串是否存在,这个功能可以使用如下的方法完成。
No | MethodName | Type | Description |
---|---|---|---|
1 | public boolean contains(String temp) | 普通 | 判断指定的内容是否存在,如果存在返回true |
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) | 普通 | 判断是否以指定的字符串开头,如果是返回true,否则返回false |
7 | public boolean startsWith(String prefix, int toffset) | 普通 | 从指定为位置开始,判断是否以指定字符串开头 |
8 | public boolean endsWith(String suffix) | 普通 | 判断是否以指定字符串结尾 |
范例:使用indexOf()等功能进行查找
public class StringDemo{
public static void main(String []args){
String str = "HelloWorld";
// 返回满足条件的第一个单词的索引
System.out.println(str.indexOf("World"));
// 返回的是第一个查找到的
System.out.println(str.indexOf("l"));
// 从第五个开始查找
System.out.println(str.indexOf("l",5));
// 从后往前找
System.out.println(str.lastIndexOf("l"));
}
}
从JDK1.5之后出现了contains()方法,这个方法可以直接返回boolean,这样省略了我们很多代码,我们也推荐使用这样的方法来判断是否包含该字符串。
字符串替换
指的就是使用心得字符串替换掉旧的字符串数据,支持的方法有如下。
No | MethodName | Type | Description |
---|---|---|---|
1 | public String replaceAll(String regex,String replacement) | 普通 | 用新的内容提替换掉全部旧的内容 |
2 | public String replaceFirst(String regex,String replacement) | 普通 | 替换首个满足条件的内容 |
范例:观察替换结果
public class StringDemo{
public static void main(String []args){
String str = "HelloWorld";
System.out.println(str.replaceAll("l","_"));
System.out.println(str.replaceFirst("l","_"));
}
}
字符串截取
从一个完整的字符串之中可以截取部分的子字符串数据,支持的方法如下
No | MethodName | Type | Description |
---|---|---|---|
1 | public String substring(int beginIndex) | 普通 | 从指定的索引截取到结尾 |
2 | public String substring(int beginIndex,int endIndex) | 普通 | 截取部分子字符串的数据 |
public class StringDemo{
public static void main(String [] args){
String str = "HelloWorld";
String resultA = str.substring(5);
String resultB = str.substring(0,5);
System.out.println(resultA);
System.out.println(resultB);
}
}
一定要记住,数据库中的函数由于考虑到是非专业人员使用操作,所以有些代码尽可能做了一些调整,但是程序是要求严谨性的,所以负数是不可能使用负数作为截取的开始点。
字符串拆分
将一个完整的字符串,按照指定的内容,拆分为字符串数组(对象数组,String对象),方法如下。
No | MethodName | Type | Description |
---|---|---|---|
1 | public String[] split(String regex) | 普通 | 按照指定字符串拆分为字符串数组 |
2 | public String[] split(String regex) | 普通 | 按照指定字符串进行部分拆分,最后的一个数组的长度由limit决定的。 |
范例:
public class StringDemo{
public static void main(String [] args){
String str = "HelloWorld";
//根据空格拆分字符串数组
String[] result = str.split(" ");
for(int i = 0 ; i < result.length ; i++ ){
System.out.println(result[x]);
}
}
}
如果在拆分的时候只是写了一个空字符串("",不是null),那么就会按照每一个字符拆分
范例:拆分IP地址
public class StringDemo{
public static void main(String [] args){
String str = "192.168.1.2";
String[] result = str.split(".");
for(int i = 0 ;i < result.length ; i++){
System.out.println(result[i]);
}
}
}
然后一运行发现,并没有拆分开来,没有输出任何东西,原因:需要转义,系统识别不了
public class StringDemo{
public static void main(String [] args){
String str = "192.168.1.2";
String[] result = str.split("\\.");
for(int i = 0 ;i < result.length ; i++){
System.out.println(result[i]);
}
}
}
如果是一写敏感字符(正则标记),严格来说是拆分不了的,如果真的遇见了拆分不了的情况,那么使用 \\(就是转义),进行转义后,才可以拆分。
范例:进行以下字符串
public class StringDemo{
public static void main(String [] args){
String str = "张三:18|李四:20|王五:24";
String [] result = str.split("\\|");
for(int i : 0 ; i < result.length ; i++){
String temp[] = result[i].split(":");
System.out.println("姓名:"+temp[0]+",年龄:"+temp[0]);
}
}
}
以后的格式可以由你根据需要任意的组合。
其他方法
以上给出的方法是可以归类的,但是在String里面也有一部分的方法是不能归类的
No | MethodName | Type | Description |
---|---|---|---|
1 | public String concat(String str) | 普通 | 字符串的链接,与“ + ”类似 |
2 | public String toLowerCase() | 普通 | 字符串转小写 |
3 | public String toUpperCase() | 普通 | 字符串转大写 |
4 | public String trim() | 普通 | 去掉字符串两边空格,留下中间空格 |
5 | public int length() | 普通 | 取得字符串长度 |
6 | public String intern() | 普通 | 字符串入池 |
7 | public boolean isEmpty() | 普通 | 判断是否是空字符串(空字符串不是null,而是"",长度0) |
8 | |||
9 |
范例:字符串的连接
public class StringDemo{
public static void main(String[] args){
String stra = "hello";
stra.concat("");
String strb = "hello "+"world";
String strc = "hello world"
System.out.println(strb == strc);
}
}
范例: 转小写与大写
public class StringDemo{
public static void main(String[] args){
String stra = "hello*(*)"
System.out.println(stra.toUpperCase());
System.out.println(stra.toLowerCase());
}
}
非字母字符不会被转义
范例:去掉空格
public class StringDemo{
public static void main(String[] args){
String str = " hello ";
System.out.println("【"+str+"】");
System.out.println("【"+str.trim()+"】");
}
}
一般在用户进行输入的时候,有可能会带有无用的空格内容,那么接受到这些数据后,就会消除掉所有的空格内容
范例:取得字符串的长度
public class StringDemo{
public static void main(String[] args){
String str = "helloworld";
System.out.println(str.length());
}
}
在某些情况下,我们会要求用户输入的数据长度是有限的,可以利用此方法判断数据长度。
- 数组对象.length
- String对象.length()
范例:判断是否为空字符串
public class StringDemo{
public static void main(String[] args){
String str = "helloworld";
// false
System.out.println(str.isEmpty);
// true
System.out.println("".isEmpty);
}
}
如果觉得isEmpty()不方便,可以使用 "".equals(str)
String类虽然提供了大量的支持的方法,但是却少了一个很重要的方法,而这样的方法只能由我们自己实现。
public class StringDemo{
public static void main(String [] args){
String str = "helloWorld";
System.out.println(initcap(str));
}
// 首字母大写
public static String initcap(String temp){
return temp.substring(0,1).toUpperCase()+temp.substring(1);
}
}
虽然Java的类库里面没有此类功能,但是很多第三方的组件包会提供。
网友评论