黑马程序员——java基础——String类的理解

<span style="font-size:14px;"><a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------</span>

一.操作String 常用方法

public boolean equals(Object obj)

判断当前字符串与obj的内容是否相同
public boolean equalsIgnoreCase(String str)
判断当前字符串与str的内容是否相同,这个方法不会区分大小写字母的区别
public int length()
返回字符串的长度,即字符的总个数
public String trim()
去掉字符串两端的空白,包括“空格,\t,\n,\r等控制符”
public String substring(int start,int end)
根据开始和结束的位置,返回当前String的子字符串
public String substring(int start)
从开始位置开始到字符串结束,返回子字符串
public char charAt(int index)
返回指定位置的字符
public int indexOf(String str)
返回子字符串在当前字符串的位置,如果当前字符串不包含子字符串就返回-1
public String concat(String str)
返回一个字符串,内容是当前字符串与str连接而成的。
字符串连接可以简化写为String str = str1 + str2;结果与concat方法相同
public boolean startsWith(String str)
判断当前字符串,是否以str开头
public boolean endsWith(String str)
判断当前字符串,是否以str结尾
String str = "I am " + "Lingo!";
这样可以获得一个内容为"I am Lingo!"的字符串,在java里可以通过这种简单的方式实现字符串的连接
。这里需要注意的是,这个过程实际上生成了三个String对象,"I am "和"Lingo!"先被生成,然后用他
们再创建一个String对象str,str的内容是两者的总和。所以,使用+进行字符串连接的时候会很耗费资
源,这个时候就需要使用另一个类StringBuffer,它的内容是可以修改的,实际上jvm内部编译之后,“
用+进行字符串连接”也是用StringBuffer实现的。
String str = "I am " + "Lingo!";
String str = new StringBuffer("I am ").append("Lingo!").toString();
上边两个是等价的。
StringBuffer类还提供了许多便利的方法,对字符串进行操作
public void reverse()
反转字符串
public void append(...)
在字符串最后添加信息
public void insert(int start,...)
在索引位置插入信息
public void delete(int start,int end)
删除指定范围的内容
split与replaceAll方法
public String[] split(String regex)
根据分隔符,把字符串切割成字符串数组
public String replace(String regex,String str)
把字符串中所有与regex匹配的部分都替换成str
regex代表“正则表达式”,如果你并不清楚它的原理,很可能会出现问题。
"1,3,4".split(",")返回的结果是{"1","3","4"}这三个字符串组成的数组
"1|3|4".split("|")返回的结果却是{"1","|","3","|","4"}五个字符串组成的数组
这个问题的原因是由于在“正则表达式”中,“|”是一个有特殊含义的字符,表示“或”,直接使用
split("|")就会把每个字符分开了。如果希望使用"|"作为分隔符,就需要使用转义字符
"1|3|4".split("\\|")返回的结果就是{"1","3","4"}三个字符串组成的数组了
“\|”是正则表达式中代表"|"的专一字符,但因为在String中“\”不能单独出现,还需要进行一次转义
,就变成了“\\|”这种形式。

replaceAll(String regex,String str)也是这种情况

代码演示:

<span style="font-size:18px;">public class StringTest {

 /**
  * 获得字符串的第一个字符
  * 获得字符串的最后一个字符
  * 删除第一个字符
  * 删除最后一个字符 
  */
 public static void main(String[] args) {
  String a = "this is String test";
  System.out.println("获得字符串的第一个字符:"+a.charAt(0));
  System.out.println("获得字符串的最后一个字符:"+a.charAt(a.length()-1));
  int m = 0;
  if(a.length()>=2){
   m = 1;
   System.out.println("删除第一个字符:"+a.substring(m, a.length()));
   System.out.println("删除最后一个字符:"+a.substring(0, a.length()-1));
  }else{
   System.out.println("删除第一个字符:null");
   System.out.println("删除最后一个字符:null");
  }
 }
}</span>

二.操作String注意错误

1:角标越界问题

String str = "1234";
String s = str.substring(3,4);

描述: 
以上代码段功能的功能是获取字符串str中的第4个字符。 

说明: 
一般情况下,程序不会有问题,如果由于某种原因,str长度变短,程序就会抛出字符串错误。 

解决方案:对字符串进行截取(substring, charAt)、转换为字节数组(getBytes),字符数组转换为字符串(valueOf)操作时,先对操作字符串对象的存在性(是否为空)及长度进行检查后,再进行操作。 

改写得到: 

String str = "1234";
if (str.length>4)
String s = str.substring(3,4);

2:字符串转换整型问题

1:如何将字符串转化为整型;

int i = Integer.parseIn(String str);

int i = Integer.valueOf().intValue();

注:Integer.parseIn 和 Integer.valueOf 不同,前者生成的是整型,而后者是一个对象,所以要通过intValue()来获得对象的值;

字串转成 Double, Float, Long 的方法大同小异.

2:整型转化为字符串

String str = String.valueOf(int i);

String str = Integer.toString(int i);

String str = "" + i ;

注: Double, Float, Long 的方法大同小异.

3:JAVA程序员最常遇见的10个异常

程序员最不想遇到黑心老板外,异常也是难以不遇,现在列出10个最遇到的异常,大家可以参考一下。

1:java.lang.NullPointerException
      这个异常大家肯定都经常遇到,异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路 径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是 对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)

2: java.lang.ClassNotFoundException
  这个异常是很多原本在JB等开发环境中开发的程序员,把JB 下的程序包放在WTk下编译经常出现的问题,异常的解释是 "指定的类不存在 ",这里主要考虑一下类的名称和路径是否正确即可,如果是在JB下做的程序包,一般都是默认加上Package的,所以转到WTK下后要注意把 Package的路径加上。

3: java.lang.ArithmeticException

  这个异常的解释是 "数学运算异常 ",比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。

4: java.lang.ArrayIndexOutOfBoundsException

     这个异常相信很多朋友也经常遇到过,异常的解释是 "数组下标越界 ",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下 标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先 声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

5: java.lang.IllegalArgumentException
  这个异常的解释是 "方法的参数错误 ",很多J2ME的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如 g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是 出现了错误。

6: java.lang.IllegalAccessException
  这个异常的解释是 "没有访问权限 ",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常。

7: java.lang.IncompatibleClassChangeError
    不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。

8:  java.lang.InstantiationError
    实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.

9: java.lang.LinkageError
    链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。

10:java.lang.StackOverflowError
        堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误

三.练习

要求:

1:声明一个String对象,其内容为“I am a student,I am at ccit”

2:输出字符串的长度

3:输出字符串的第一个和最后一个字符

4:输出字符串的第一个和最后一个单词

5:将其中的‘c’替换为‘C’输出

6:输出其中的各个单词

7:判断字符串中是否包含“ma”这个单词

8:判断字符串是否以“I”开头,以“I”结尾

<span style="font-size:18px;">public class Du02 { 
 
	public static void main(String[] args) { 
 
		String str = "I am a student,I am at ccit";  
		 
		System.out.println(str.length()); 
		 
		System.out.println(str.charAt(0)); 
		System.out.println(str.charAt(str.length()-1));// 
		 
		int firstIndex = str.indexOf(" "); 
		System.out.println("First word: " + str.substring(0, firstIndex)); 
		int lastIndex = str.lastIndexOf(" "); 
		System.out.println("Last word: " + str.substring(lastIndex)); 
		 
		System.out.println(str.replace('c', 'C')); // 
		 
		String[] ary = str.replace(",", " ").split("\\s+"); 
		for(int i =0; i < ary.length; i++){ 
			if(!ary[i].trim().equals("")){ 
				System.out.println(ary[i].trim()); 
			} 
		} 
		 
		System.out.println("String contains ma? " + str.concat(" ma ")); 
		System.out.println("String starts with 'i', ends with 'i'? " + str.matches("I(.)*I")); 
		 
 
	} 
 
} 
 </span>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值