一、String类
1、类中有操作字符串的方法
查找:找到某个字符是字符串内的第几个:charAt;找到某个字符在字符串内第一次出现的下标:index
替换:替换所有:replaceAll;替换首个:replaceFirst
比较:比较对象内的字符是否相等:equals;
转换:转成大写:toUpperCase;转成小写:toLowerCase;类型转换:转成int类型:valueOf;格式化:format
拆分:以某个符号拆分:split(String regex) ;拆分后,分为几组:String[] split(String regex, int limit)
截取:String substring(int beginIndex) :从索引处截取到结尾;String substring(int beginIndex, int endIndex) :截取部分内容
其他:删除字符串内的空格:trim
2、StringBuffer和StringBuilder
上面那些操作字符串的方法,不是在字符串本身操作的,最后操作完之后会返回一个新的字符串。
String类的不可变性
因为String类内部获取字符下标的value的修饰符是private,隐藏在类里面,并且类里面也没有操作value的方法,所以获取不到下标,就操作不了字符串。
那么是如何操作的呢?
将String类转换为StringBuffer或者StringBuilder这两个类,这两个类与String类的大部分功能相似。
第一步:String类转换为StringBuilder类。方法:通过调用StringBuilder的append方法或者构造方法转换,然后再对字符串进行操作。
第二步:操作完后,StringBuilder类转换为String类。方法调用StringBuilder类的toString方法
但是这两个有区别:
StringBuffer可以对线程进行保护,但是效率低,而StringBuilder不对线程保护,但效率高。
二、异常
例如常见的:算数异常,空指针异常,这些都属于异常。
异常分为编译时异常和运行时异常。
产生的异常需要处理,如果在某时不想处理,就先抛出这个异常,并且还要声明一下,告诉方法的调用者在当前方法不处理这个异常,这里有个异常需要你来捕获处理一下,然后将异常向上传递,传给方法的调用者,但是如果是运行时异常抛出后,不需要处理,直接交给jvm,编译时异常,就继续向上传递了,若方法调用者不想处理,就继续向上传递,最后传到jvm里面,就中断程序了。
抛出异常:
public static int getElement(int[] array, int index){ if(null == array){ throw new NullPointerException("传递的数组为null"); //异常的抛出使用throw关键字 } }
异常的声明:
public void OpenConfig(String filename) throws IOException{ //使用throws声明异常 if(filename.endsWith(".ini")){ throw new IOException("文件不是.ini文件"); }
异常的捕获处理:
try{ // 将可能出现异常的代码放在这里 }catch(要捕获的异常类型 e){ // 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的基类 时,就会被捕获到 // 对异常就可以正常处理,处理完成后,跳出try-catch结构,继续执行后序代码 }[catch(异常类型 e){ // 对异常进行处理 }finally{ // 此处代码一定会被执行到 }]
finally这个关键字的功能是用来释放资源的,所以finally处的代码无论异常有没有被成功捕获都会被执行。