Java 学习笔记——字符串

        Java为字符串提供了String与StringBuffer俩个类,其中各自实现了丰富的方法。String类跟传统的string字串一样,有固定的长度,可执行赋值、修改、匹配查询等操作。StringBuffer类实现了String长度的动态变化,可执行增加、删除等操作。下面分别来描述一下这两个类。

*************************************************************************************************************************************************************************************

String类  与  StringBuffer类的详细信息可以查看Java SDK的官方文档

正则表达式

*************************************************************************************************************************************************************************************

String类:

1. String的比较操作: == 与 equals

        在Java里面,除了基本数据类型以外,其它所有参数都为引用类型,所以在进行==比较时比较的将是其引用变量地址。另外Java所有的类都将继承自object,所有它们都存在equals方法,当然不同对象的equals方法实现是不一样的,在使用时需要自己根据实际情况重写。String.equals()方法提供了一个默认的方法,那就是比较两个String里面的字符串内容是否匹配。

        这里有一点需要注意,在使用==比较引用地址时,如果不是通过new方法获得的字串,那么引用地址很难确保唯一。看下面的代码示例:

String str1 = "hello";     // new String("hello");
String str2 = "hello";
if(str1 == str2){
System.out.println(true);
}else{
System.out.println(false);
}

        运行上面的代码将输出"true",说明str1与str2的地址一样。 出现这种情况的原因是因为 "hello"字串本身就是一个对象,在str1 = "hello";时将此对象的引用地址赋值给str1,str2也执行了一样的操作,所以str1与str2这两个引用地址此时是指向同一个对象。在Java里面一定要记住一点:一切皆对象,除了基本数据类型外其它变量皆为引用对象。

        另外String类还提供了一种忽略大小写的字串比较方法 equalsIgnoreCase(String str);

str1.equalsIgnoreCase(str2);   //字串str1与字串str2比较,忽略大小写,如果相等放回true,否则返回false


2. 字符串大小写相关方法: 

str1.toUpperCase();  —— 将字串str1全部转换成大写后作为副本返回,str1 字串本身不变。

str1.toLowerCase();  —— 将字串str1全部转换成小写后作为副本返回,str1 字串本身不变。

String str1 = "Hello world";
String str2 = "Hello world2";
str1.toUpperCase();
str2.toLowerCase();
System.out.println(str1 + " " + str2);
str1 = str1.toUpperCase();
str2 = str2.toLowerCase();
System.out.println(str1 + " " + str2);

上述代码运行后输出:

Hello world Hello world2
HELLO WORLD hello world2


3.字符串的拼接

        前面我曾经说过String类在定义以后其长度就已经固定,那么字串的拼接又是如何实现的呢?Java有两种方法来实现字串的拼接:

方法一: 使用"+"操作符,此方法在输出打印语句中经常出现。

方法二:使用 str1.concat(str2)方法,此方法将str2拼接在str1后面,然后将拼接好的字串做为一个副本返回,str1与str2本身不变(字串的长度唯一)。具体看下面示例:

String str1 = "Hello, ";
String str2 = "Steven";
String str3 = str1.concat(str2);
System.out.println(str1 + "* " + str2 + "* " + str3);


4.字符串的索引匹配查询

        Java提供了四种对字串的匹配查询方法,分别为:

        str1.indexOf(int ch);                —— 从str1字串开始处查找字符 ch ( 这里定义的参数是int,因为它们之间是相互兼容的,可实现转换),如果存在匹配,在返回第一个匹配的索引地址,然后停止查询。如果查询到结尾未发现匹配,则返回 -1 。 

//  注意: 这里的索引跟数组索引一样,是从0开始。

        str1.indexOf(String str);          —— 与上一个方法类似,只不过是匹配一个字符串 str

        str1.indexOf(int ch, int fromIndex);    —— 此方法同第一个类似,只不过开始查询的起始索引值不再是0,而是传入的参数 fromIndex。 此方法与第一个方法配合,可实现整个字串的查询(注意配合使用时fromIndex为上一次查询返回的index+1)。

        str1.indexOf(String str, int fromIndex);  —— 功能同第三个方法, 用来与第二个方法配合。

看一个示例代码:

Scanner input = new Scanner(System.in);
System.out.print("请输入一段字符串:");
String in = input.nextLine();
System.out.print("请输入要查找的字符串:");
String search = input.next();
/String pos = new String();
int index = in.indexOf(search);
while(index > -1){
pos = pos.concat(Integer.toString(index));
/pos = pos.concat("#");
index = in.indexOf(search, index + 1); // 查找字符串匹配的起始位置索引
}
/String[] array = pos.split("#");
System.out.println("字符串\"" + search + "\"出现的位置为:");
for(int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}

这里输入字符串:我爱大家,爱中国 很爱大海 爱小倩也爱小萌 不爱大虫子

输入要查找的字符串:爱大

控制台输出结果为:

字符串"爱大"出现的位置为:
1   10   23   

         同上面四个方法类似,String还提供了另外四个方法用来查找字串中最后一个匹配字符串的索引位置,这里不再讨论。

        另外String类还提供了一个方法用来获取某个索引位置上的字符  char   charAt(int index);


5.字符串的拆分

        前面有提到字符串的拼接,那么在平常使用中我们还经常需要对字符串进行拆分,例如输入一个字符串:1+2+9-4+9 ,计算其结果。想要实现此功能就需要对字符串惊醒拆分,并将其逐个转换成基本数据类型,然后进行运算。

        字符串的拆分使用 String[] split(String reg) 方法。通过reg参数设定拆分条件,将字符串逐个拆分并保存在一个数组副本返回。这里提供了一个简单的示例:

String str = "1+2+9-4+9";
int sum = 0;
String[] array1 = str.split("\\+");
for(int i = 0; i < array1.length; i++){
try{
sum += Integer.parseInt(array1[i]);
}catch(NumberFormatException e){
String[] array2 = array1[i].split("-");
int temp = Integer.parseInt(array2[0]);
for(int j = 1; j < array2.length; j++){
temp -= Integer.parseInt(array2[j]);
}
sum += temp;
}
}
System.out.println(sum);


6.其它几个常用操作

       1.基本数据类型转换成字符串的方法: 

               方法一:使用基本数据类型的封装类。 如  Integer.toString(12);

               方法二:使用String类提供的valueOf方法。 如  String.valueOf(12);

        2.获取字符串长度方法  ——  String变量名.length();  //返回字符串的长度(此值定义方式跟数组的index索引方式一样)

        3.去除字符串首尾的空格,字符串中间的空格不变  ——  String变量名.trim();   //返回去除字符串去除空格后的一个新字符串的副本,原字符串不变

        4.获取字符串中某个位置的字符  ——  String变量名.charAt(index);   // 返回获取索引index位置的字符。

        5.查询字符串是否符合给定的正则表达式规则  —— String变量名.matches(regex);    // 若符合正则表达式要求则返回true;否则返回false;


***************************************************************************************************************************************************************************************

StringBuffer类

        StringBuffer类是String类的一个增强类,它主要在String的基础上实现了字符串长度的可变性。类似于String的一些常用方法,Stringbuffer主要增加了拼接、插入、删除操作;因为StringBuffer是长度是动态变化的,所以上述的操作修改的都是StringBuffer本身。

1. 拼接方法   ——  append(para);   // 这里参数可以为基本数据类型及String类型中的任意一种,而String的拼接方法concat只能拼接String类型。 StringBuffer长度动态增长

2. 插入方法  ——   insert(offset, para);  // 这里para参数跟拼接方法一样,将para参数从索引offset位置处插入。 StringBuffer长度动态增长。

3. 删除方法  ——   deleta(start, end);    //  删除索引start到end之间的一段字符串。 StringBuffer长度动态减少。

4.将StringBuffer转换成String返回  ——   String  StringBuffer类变量.toString();

5.索引匹配  ——   同String类中索引匹配方法, 使用indexOf 与 lastIndexOf

6.其它获取长度,获取指定位置的char同String类方法。

注意:1.StringBuffer类中没有split拆分方法。

             2.StringBuffer类中没有实现equals方法,所以对StringBuffer调用equals时,将调用object的默认方法对两个StringBuffer的引用地址进行比较。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值