String类常用方法

  • Post author:
  • Post category:其他

在实际的项目开发过程之中,只要是项目都一定会存在String类的定义,所以掌握这个类之中的常用处理方法对我们开发者而言是非常重要的。

JavaDoc文档简介

在以后进行开发的过程之中肯定要大量的去使用API文档(JavaDoc),这个文档可以直接通过oracle的在线访问进行查看。JavaDoc
在JDK1.9之后,所有的常用类库都会在JVM启动的时候进行全部的加载,这样实际上性能会有所下降,但1.9开始提供有模块化设计,
在这里插入图片描述
在模块之中会包含大量的程序开发包:
在这里插入图片描述
如果现在要想去看String类的相关定义,则可以打开java.lang这个包,String是一个系统提供的较为标准的类,所以现在以这个类的文档结构进行说明,一般文档里面的醉成会有以下几个部分:
类的完整定义:
在这里插入图片描述
类的相关说明:
在这里插入图片描述
成员属性摘要:
在这里插入图片描述
构造方法摘要:(如果看见有Deprecated表示不建议使用)
在这里插入图片描述
方法摘要:(不同的版本是有差别的)(左边为返回值,右边为方法名称和相应的参数)

在这里插入图片描述
详细说明:
在这里插入图片描述
文档一般都会有一些“假”的中文翻译版(自动翻译的),对于这些翻译版最好你别用,整个java的开发涉及的文档有几十分,上百分,没有中文,如果你现在都没有习惯于阅读英文文档,后面的文档你就看不懂了。

字符串与字符数组

在JDK1.9以前,所有的String都利用了字符数组实现了包装的处理,所以在String类里面是提供有相应的转换处理方法的,这些方法包含有构造方法与普通方法两类。
方法名称:
public String(char[ ] value) 将传入的全部字符数组全部转换为字符串
public String(char [ ] value,int offset, int count) 将部分字符数组变为字符串
public char charAt(int index) 获取指定索引位置的字符
public char[ ] toCharArray() 将字符串中的数据以字符数组的形式返回
范例:观察chartAt()方法

public class StringDemo {
	public static void main(String args[]){
		String str = "www.mldn.cn" ;
		char c = str.charAt(5) ;
		System.out.println(c) ;
	}
}

利用charAt()是可以获取某一个指定索引位置的字符,但是程序之中的索引下标都是从零开始的。
在程序语言之中,最早一直强调的就是字符串应该使用字符数组进行描述,所以这一操作在String类的方法中也是有所体现的。
范例:实现字符串与字符数组的转换

public class StringDemo {
	public static void main(String args[]){
		String str = "helloworld" ;
		char [] result = str.toCharArray() ;  // 将字符串变为字符数组
		for (int x = 0; x < result.length ; x ++){
			result[x] -= 32 ;
		}
		// 将处理后的字符数组交给String变为字符串
		String newStr = new String(result) ;
		System.out.println(newStr) ;
		System.out.println(new String(result,0,5)) ;
	}
}

在这里插入图片描述
现在假设说要求做一个验证功能,判断某一个字符串中的数据是否全部由数字所组成。那么这个时候可以采用如下的思路。
如果要想判断字符串中的每一位最好的做法是将字符串变为字符数组;
可以判断每一个字符是否在数字的范围之内(‘0’ ~ ‘9’);
如果有一位不是数组则表示验证失败
范例:实现字符串的检查

public class StringDemo {
	public static void main(String args[]){
		String str = "helloworld" ;
		System.out.println(isNumber(str) ? "由数字所组成" : "不是由数字所组成") ;
		System.out.println(isNumber("123") ? "由数字所组成" : "不是由数字所组成") ;
	}
	// 该方法主要是判断字符串是否由数字所组成
	public static boolean isNumber(String str){
		char [] result = str.toCharArray() ;  // 将字符串变为字符数组
		for (int x = 0; x < result.length; x ++){
			if (result[x] < '0' || result[x] > '9'){
				return false ;
			}
		}
		return true ;
	}
}

在这里插入图片描述
在实际之中处理中文的时候往往使用char类型,因为其可以包含中文数据。

字符串与字节

字符串与字节数组之间也可以实现转换的处理操作,但是需要提醒一下,当进行了字符串与字节转换时,其主要目的是为了实现二进制的数据传输,或者是进行编码转换。
方法名称: 类型 描述
public String(byte[ ] bytes) 构造 将全部的字节数组变为字符串
public String(byte[ ] bytes,int offset, int length) 构造 将部分的字节数组变为字符串
public byte[ ] getBytes() 构造 将字符串转为字节数组
public byte[ ] getBytes(String charsetName) throws
UnsupportedEncodingException 普通 编码转换
范例:观察字节与字符串的转换

public class StringDemo {
	public static void main(String args[]){
		String str = "helloworld" ;
		byte data[] = str.getBytes() ;  // 将字符串变为字节数组
		for (int x = 0 ; x < data.length ; x ++){
			data[x] -= 32 ;
		}
		System.out.println(new String(data)) ;
		System.out.println(new String(data,0,5)) ;
	}

}

字节本身是有长度限制的,一个字节做多可以保存的范围是:-128~127之间。

字符串比较

字符串比较里面最为常用的方法就是equals()方法,但是这个方法需要注意的是其是进行大小写区分的。而除了这种方法,还有很多的比较方法。

范例:观察大小写比较

public class StringDemo {
	public static void main(String args[]){
		String strA = "mldn" ;
		String strB = "MLDN" ;
		System.out.println(strA.equals(strB)) ;  // false
	}

}

方法名称 类型 描述
public boolean equals(String anObject) 普通 区分大小写的相等判断
public boolean equalsIgnoreCase(String anotherString) 普通 不区分大小写比较
public int compareTo(String anotherString) 普通 进行字符串大小比较,该方法返回 一个int数据,该数据有三种取值:大于(>0)、小于(<0)、等于(=0)
public int compareToIgnoreCase(String str) 普通 不区分大小写进行字符串大小比较

范例:进行不区分大小写比较

public class StringDemo {
	public static void main(String args[]){
		String strA = "mldn" ;
		String strB = "MLDN" ;
		System.out.println(strA.equalsIgnoreCase(strB)) ;  // true
	}

}

范例:进行大小比较

public class StringDemo {
	public static void main(String args[]){
		String strA = "mldn" ;
		String strB = "mldN" ;
		System.out.println(strA.compareTo(strB)) ;  // m - M   =  32
	}

}
public class StringDemo {
	public static void main(String args[]){
		String strA = "mldn" ;
		String strB = "mldN" ;
		System.out.println(strA.compareTo(strB)) ;  // m - M   =  32
		System.out.println(strB.compareTo(strA)) ;  // M - m   =  -32
		System.out.println("Hello".compareTo("Hello")) ;  // 0
	}

}

compareTo()方法后面还会有更加详细的解释,对于此方法很重要,而后为了可以实现忽略大小写的比较也可以使用compareToIgnoreCase()方法实现:
范例:忽略大小写比较

public class StringDemo {
	public static void main(String args[]){
		String strA = "MldN" ;
		String strB = "mldN" ;
		System.out.println(strA.compareToIgnoreCase(strB)) ;  // 0
		System.out.println("Hello".compareToIgnoreCase("Hello")) ;  // 0
	}

}

由于此时的内容一样,所以在不计较大小写的情况下,两者的比较结果就是相同的。

字符串查找

从一个完整的字符串之中查找字符串的存在就属于字符串查找操作,在String类里面一共提供有如下的几个查找方法。
public public boolean contains(String s) 普通 判断子字符串是否存在
public int indexOf(String str) 普通 从头查找指定字符串的位置,找不到返回-1.
public int indexOf(String str,int fromIndex) 普通 从指定位置查找指定字符串的位置
public int lastIndexOf(String str) 普通 由后向前查找指定字符串的位置
public int lastIndexOf(String str,int fromIndex) 普通 从指定位置由后向前查找指定字符串的位置
public boolean startsWith(String prefix) 普通 判断是否以指定的字符串开头
public boolean startsWith(String prefix, int toffset) 普通 由指定位置判断是否以指定的字符串开头
public boolean endsWith (String suffix) 普通 判断是否以指定的字符串结尾
范例:判断子字符串是否存在

public class StringDemo {
	public static void main(String args[]){
		String str = "www.mldn.cn" ;
		System.out.println(str.contains("mldn")) ;   //  true
	}

}

此方法的操作相对而言比较直观一些,但是这个方法是从JDK1.5之后开始追加到程序之中的功能。在JDK1.5之前如果要进行数据的查询往往只能依靠indexOf()方法来完成。
范例:判断字符串是否存在

public class StringDemo {
	public static void main(String args[]){
		String str = "www.mldn.cn" ;
		System.out.println(str.indexOf("mldn")) ; 
		System.out.println(str.indexOf("hello")) ;   // -1
		if (str.indexOf("mldn") != -1){
			System.out.println("数据存在.") ;
		}
	}

}

在这里插入图片描述
indexOf()是为了进行子字符串位置的查询,在一些开发过程之中就可以利用此形式来进行一些索引的位置确定。indexOf()由前向后查找的,也可以由后向前查找。
范例:使用lastIndex()查找。

public class StringDemo {
	public static void main(String args[]){
		String str = "www.mldn.cn" ;
		System.out.println(str.lastIndexOf(".")) ; 

		}
	}
public class StringDemo {
	public static void main(String args[]){
		String str = "www.mldn.cn" ;
		System.out.println(str.lastIndexOf(".")) ; 
		System.out.println(str.lastIndexOf(".", 5)) ;
		}
	}

在这里插入图片描述
在进行字符串查找的时候也需要判断开头和结尾的操作。
范例:判断是否以指定的字符串开头和结尾

public class StringDemo {
	public static void main(String args[]){
		String str = "**@@www.mldn.cn##" ;
		System.out.println(str.startsWith("**")) ; 
		System.out.println(str.startsWith("@@", 2)) ; 
		System.out.println(str.endsWith("##")) ;
		}
	}

在这里插入图片描述
后面的许多设计都需要它的支持。

字符串替换

所谓的字符串替换指的是可以通过一个指定的内容进行指定字符串的替换显示,对于替换方法主要有两个。
public String replaceAll(String regex, String repalacement) 普通 进行全部替换
public String replaceFirst(String regex, String repalcement) 普通 替换首个
范例:实现替换处理

public class StringDemo {
	public static void main(String args[]){
		String str = "helloworld" ;
		System.out.println(str.replaceAll("l","X")) ;
		System.out.println(str.replaceFirst("l","X")) ;
		}
	}

替换后面会有更加详细的讲解,并且在开发之中,尤其是涉及的时候替换很重要。

字符串拆分

在字符串处理的时候还提供一种字符串拆分的处理方法,字符串的拆分操作主要是可以根据一个指定的字符串或者是一些表达式实现字符串的拆分,并且拆分完成的数据将以字符串数组的形式返回。
public String[ ] split(String regex) 普通 按照指定的字符串全部拆分
public String[ ] split(String regex,int limit) 普通 按照指定的字符串拆分为指定个数,后面不拆了
范例:观察字符串拆分处理

public class StringDemo {
	public static void main(String args[]){
		String str = "hello world hello mldn"  ;
		String result [] = str.split(" ") ;  //  空格拆分
		for (int x = 0; x < result.length ; x ++){
			System.out.println(result[x]) ;
		}
		}
	}

在这里插入图片描述
除了可以全部拆分之外,也可以拆分为指定的个数。
范例:拆分指定个数

public class StringDemo {
	public static void main(String args[]){
		String str = "hello world hello mldn"  ;
		String result [] = str.split(" ", 2) ;  //  空格拆分
		for (int x = 0; x < result.length ; x ++){
			System.out.println(result[x]) ;
		}
		}
	}

在这里插入图片描述
但是在进行拆分的时候有可能会遇见拆不了的情况,这个时候最简单的理解就是使用“\”进行转义(双斜线就是单斜线)

public class StringDemo {
	public static void main(String args[]){
		String str = "192.168.1.2"  ;
		String result [] = str.split("\\.") ;  //  空格拆分
		for (int x = 0; x < result.length ; x ++){
			System.out.println(result[x]) ;
		}
		}
	}

在这里插入图片描述
对于拆分与替换的更多操作后续才会说明。

字符串截取

从一个完整的字符串之中截取子字符串,对于截取操作有两个方法:
public String substring(int beginIndex) 普通 从指定索引截取到结尾
public String substring(int beginIndex,int endIndex) 普通 截取指定索引范围中的子字符串
范例:观察字符串截取操作

public class StringDemo {
	public static void main(String args[]){
		String str = "www.mldn.cn"  ;
		System.out.println(str.substring(4,8)) ;

	}
}

在这里插入图片描述
在实际的开发之中,有些时候的开始或结束索引往往都是通过indexOf()方法计算得来的。
范例:观察截取

public class StringDemo {
	public static void main(String args[]){
		// 字符串结构:“用户id-photo-姓名.后缀”
		String str = "mldn-photo-张三.jpg"  ;
		int beginIndex = str.indexOf("-",str.indexOf("photo")) + 1 ;
		int endIndex = str.lastIndexOf(".") ;
		System.out.println(str.substring(beginIndex,endIndex)) ;


	}
}

在这里插入图片描述
在以后的实际开发之中,这种通过计算来确定索引的情况非常常见。

字符串格式化

从JDK1.5开始为了吸引更多的传统开发人员,Java提供有了格式化数据的处理操作,类似于C语言之中的格式化的输出语句,可以利用占位符实现数据的输出,对于占位符而言,常用的:字符串(%s)、字符(%c)、整数(%d)、小数(%f)等。
public static String format(String format,各种类型…args) 普通 根据指定结构进行文本显示
范例:观察格式化处理

public class StringDemo {
	public static void main(String args[]){
		String name = "张三" ;
		int age = 18 ;
		double score = 98.765321 ;
		String str = String.format("姓名:%s、年龄:%d、成绩:%5.2f",name,age,score) ;
		System.out.println(str) ;
	}
}

这种格式化的输出操作算是String的一个附加功能。

其他操作方法

在String类里面还有一些比较小的方法提供给开发者,这些方法如下:
public String cincat(String str) 普通 描述的就是字符串的连接
public String intern() 普通 字符串入池
public boolean isEmpty 普通 判断是否为空字符串(不是null)
public int length() 普通 计算字符串的长度
public String trim() 普通 驱除左右的空格信息
public String toUpperCase() 普通 转大写
public String toLowerCase() 普通 转小写

范例:观察字符串的连接

public class StringDemo {
	public static void main(String args[]){
		String strA = "www.mldn.cn" ;
		String strB = "www.".concat("mldn").concat(".cn") ;
		System.out.println(strB) ;
		System.out.println(strA == strB) ;   // false
	}
}

从整体的运行结果来讲,虽然内容相同或,但是发现最终得结果是一个false,证明此操作并没有实现静态的定义。
在字符串定义的时候“ “” ” 和 “ null ”不是一个概念,一个表示有实例化对象,一个表示没有实例化对象,而isEmpty主要是判断字符串的内容,所以一定要在有实例化对象的时候进行调用。
范例:判断空字符串

public class StringDemo {
	public static void main(String args[]){
		String strA = "" ;
		System.out.println(strA.isEmpty()) ;  //true
		System.out.println("mldn".isEmpty()) ;  //false
	}
}

范例:观察length()与trim()

public class StringDemo {
	public static void main(String args[]){
		String strA = "     Hello World" ;
		System.out.println(strA.length()) ;  //  长度
		String trimStr = strA.trim() ;
		System.out.println(strA) ;
		System.out.println(trimStr) ;
		System.out.println(trimStr.length()) ;
	}
}

在这里插入图片描述
在进行一些数据输入的时候(用户名和密码)你很难保证你输入的数据没有空格,有空格的时候数据的查找就会出现错误,那么久必选对输入的数据进行处理,使用trim()。
在String类里面提供有大小写转换,但是这种转换的1特征是可以避免非字母的转换。
范例:观察大小写的转换

public class StringDemo {
	public static void main(String args[]){
		String strA = "Hello World !!!" ;
		System.out.println(strA.toUpperCase()) ;
		System.out.println(strA.toLowerCase()) ;
	}
}

在这里插入图片描述
用这样的方式进行转换可以节约我们的开发成本,毕竟如果要我们自己去写,还需要判断字母的范围,而后再进行转换。
虽然在Java之中String类已经提供有大量的方法了,但是缺少一个首字母大写的方法,这个方法可以由开发者自行设计实现,利用方法的组合即可。
范例:自定义一个实现首字母大写的方法。

class StringUtil {
	public static String initcap(String str){
		if (str == null || "".equals(str)){
			return str ;   //  原样返回
		}
		if (str.length() == 1){
			return str.toUpperCase() ;
		}
		return str.substring(0,1).toUpperCase() + str.substring(1) ;
	}
}
public class StringDemo {
	public static void main(String args[]){
		System.out.println(StringUtil.initcap("hello")) ;
		System.out.println(StringUtil.initcap("m"))  ;
	}
}

此代码是在日后实际开发中必定要使用的程序。


版权声明:本文为qq_27906715原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。