JAVA——从基础学起(三)字符串

三 字符串

3.1 String类

在Java中将字符串作为对象来处理,可以通过java.lang包中的String类来创建字符串
对象。注意,字符串类型并不是基本数据类型。

3.1.1 声明字符串

Java中的字符串必须包含在一堆双引号之内,如String a = "abcdd"
可以使用String str来声明一个字符串变量,声明字符串变量需要初始化才能够使用。

3.1.2 创建字符串

由于字符串作为对象管理,所以可以像创建其他类对象一样创建字符串对象。
String类的常用构造方法为:
(1)String(char a[])

char [] ch = {'a','c','s','d'};
String str = new String(ch);

(2)String(char[] a , int offset , int length)
提取字符数组的一部分创建字符串变量,offset表示开始截取的位置,length代表字符串长度

char[] ch = {'a','c','s','d','a','c','s','d'};
String str = new String(ch,2,4);

(3)还可以使用字符串常量的引用赋值给一个字符串变量

String str;
str1 = "asdasd";

注意:String str = new String("abc");创建了几个对象?
答案应该是两个对象,具体解释参见[Java字符串声明]

3.2 连接字符串

3.2.1连接多个字符串

“ + ” 运算符可以用于连接多个运算符并产生一个String对象

String s1 = new String("ABC");
String s2 = new String("def");
String s = s1 + s2;

注意,如果一个字符串长度过长,可以用如下格式分行书写

String s3 = new String("改革春风吹满地,中国人民真争气!人是衣马是鞍," +
                       "一看长相二看穿。")
3.2.2 连接其他数据类型

字符串看也可以同其他基本数据类型连接,会将这些数据直接转换为字符串。

int  a = 4 ;
double b = 1.0;
String s = new String("abc");
System.out.println(s + a + b);

这里的a和b都不是字符串类型,但当他们和字符串连接时会自动调用toString()方法将其转换为字符串形式参与连接
注意: 一般需要谨慎使用字符串与其他数据类型连接,因为可能导致以下问题

int a = 1 ;
int b = 2 ;
String s = new String ("abc");
System.out.println(s + a + b);
System.out.println(s + (a + b));

第一次输出为abc12,第二次输出为acb3

3.3获取字符串信息

3.3.1 获取字符串长度

使用String类的length()方法可以获取声明的字符串长度

String str = new String("ajsggfqquiw");
int size  = str.length();
3.3.2 字符串查找

String类提供两种字符串查找方式
(1)indexOf(String s),用于返回搜索的字符或字符串首次出现的位置

String str = new Strng ("We are the world");
str.indexOf("a"); //返回值为3

当没有检索到字符串s时,返回值为-1

(2)lastIndexOf(String s),用于返回崔后一次出现的位置
使用方法与indexOf()方法类似不再赘述。
**注意:**如果检索的字符串s为""空字符串,则lastIndexOf()方法返回的结果与length()方法返回结果相同。

3.3.3 获取指定索引位置的字符

使用方法为String.charAt(int index)

3.4 字符串操作

3.4.1 获取子字符串

(1)String.substring(int beginIndex),该方法返回是从指定位置开始截取直到该字符串结尾
(2)String.substring(int beginIndex , int endIndex),返回从指定位置开始截取到指定位置结束的字串。

3.4.2 去除空格

String.trim()方法返回字符串str的副本,忽略前导空格和尾部空格。

3.4.3 字符串替换

String.replace(char oldChar , char newChar)方法可以实现将指定的字符或字符串替换成新字符或字符串

String str = new String("Project A");
str.replace("r","R");

注意:被替换的字符如果在字符串中出现多次,则所有的该字符都会被替换;要替换的oldChar需要与原字符串中的字符大小写保持一致

3.4.4 判断字符串开头与结尾

String.startsWith(String prefix)String.endsWith(String suffix)方法返回值均为boolean类型

String str = new String("bcdefg987654321");
boolean starts = str.stratsWith("bc");
boolean ends = str.endsWith("21");
3.4.5 判断字符串是否相等

对基本数据类型进行判断相等用到比较运算符 “ == ” ,但是对于字符串对象,或者说所有类的对象都不能够仅仅只用 “ == ”来进行判断。当类的对象之间使用 == 来进行比较时,比较的是该对象的地址是否相同。
由于Java中所有类都是Object类的子类,因此应用Object类中定义的equals方法可以对类的对象进行比较。


因此两个字符串进行比较时,应使用equals()方法或equalsIgnoreCase()方法。
str1.equals(String str2):如果两个字符串具有相同的字符和长度,返回true。
str1.equalsIgnoreCase(str2):忽略大小写的情况下对两字符串进行判断相等

3.4.6 按字典顺序比较两个字符串

str.compareTo(String anotherstr),如果按照字典顺序比较此String对象位于参数字符串之前,则比较结果为一个负整数,如果在参数之后,则返回结果为一个正整数。
compareTo()方法只有在equals(Object obj)方法返回true的情况下才返回0。

3.4.7 字符串字母大小写转换

str.toUpperCase()str.toLowerCase()分别为转换为大写和转换为小写。
在使用这两个方法进行字符串大小写转换时,数字或非字符不受影响。

3.4.8 字符串分割

使用String.split(String sign)String.split(String sign,int limit)可以对字符串进行分割,具体分隔符和分割的次数由方法中的参数决定

class SplitTset{
    String str = new String ("192.168.1.1");
    String[] firstSplit = str.split("\\.");//使用转义字符\\.对字符串按照.进行分割
    String[] secondSplit = str.split("\\.",2);//按照.对字符串进行两次分割
    for(String x: firstSplit) {
			 System.out.print("["+ x + "]");
		 }
     for(String x: secondSplit) {
			 System.out.print("["+ x + "]");
		 }
}

第一次分割结果为:[192][168][1][1] ; 第二次分割结果为[192][168.1.1]
注意:如果想定义多个分隔符,分割符间需要用 “ | ” 隔开,如str.split("\\.|,")表示用“.”和“,”进行分割。

3.5 格式化字符串


String类中的静态方法format()用于创建格式化的字符串,有两种重载形式:
表示使用指定的格式字符串和对象参数,返回一个格式化的字符串。
String.format(Sting format , Object...args)
String.format(Local L ,Sting format , Object...args)
Local L代表格式化过程中需要应用的语言环境,L为null时,不进行本地化。
format是格式字符串,通过判断format中的内容来判断所需要的格式。
args为格式字符串中由格式说明符引用的参数,参数数目可变。
更加详细的关于format方法的介绍参照format方法


3.5.1 日期和时间字符串格式化

format方法通过给定的特殊转换符作为参数实现对时间和日期的格式化。

import java.util.Date;//导入java.util包中的Date类

public class GetDate {

	public static void main(String[] args) {
		Date date = new Date();
		String hour = String.format("%tH", date);
		String minute = String.format("%tM", date);
		String second = String.format("%tS", date);
		
		String time = String.format("%tc", date);
		String form = String.format("%tF", date);
		
		System.out.println("现在是:"+hour+"时"+minute+"分"+second+"秒。");
		System.out.println("全部的时间信息是:"+time);
		System.out.println("格式是:"+form);
	}
}

结果为
现在是:13时54分35秒。
全部的时间信息是:周日 5月 17 13:54:35 CST 2020
格式是:2020-05-17

3.5.2 常规类型格式化

常规类型格式化可应用于任何参数类型。

public class General {

	public static void main(String[] args) {
		String str1String = String.format("%d", 1000/6);//转换为十进制整数格式
		String str2String = String.format("%b", 1>2);
		String str3String = String.format("%x", 1000);//转化为16进制整数格式
		
		System.out.println("1000/6的十进制整数表示是:"+str1String);
		System.out.println("1>2的结果是:"+str2String);
		System.out.println("1000的16进制整数表达形式为:"+str3String);
	}
}

结果为
1000/6的十进制整数表示是:166
1>2的结果是:false
1000的16进制整数表达形式为:3e8

3.6 使用正则表达式


正则表达式通常被用于判断语句中,用于判断某个字符串是否满足某一特定格式。正则表达式是一些具有特殊意义的字符组成的字符串,这些特殊字符被称为正则表达式的元字符。而且在真个表达式中允许使用限定修饰符来限定元字符出现的次数。


我们来接触一个例子
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
是不是感到晦涩难懂?其实将这个正则表达式分解之后很好理解
\\w表示非空白字符,表示这个位置的字符不可以是空格,\\w+表示这样的非空字符可以出现一次或多次。
@即表示字符‘@’,同理\\w+同样表示若干非空字符。
(\\.\\w{2,3})*放在一起理解就是:由一个“ . ”和2-3个非空字符组成一个字符组,这样类型的字符组可以出现0次或多次
最后的(\\.\\w{2,3})表示由一个“ . ”和2-3个非空字符组成一个字符组一定会在字符串末尾出现一次。
这东西有啥用呢?
其实可以用来表示E-mail格式的字符串如:19980504@xjbsmail.com.cn或者ffffffff@789.dfg.com等等

由例子我们引出正则表达式的组成
(1)元字符:由固定字符组成的表示特殊意义的字符组合
\\w表示非空字符,\\D表示任何一个非数字字符 等

(2)[] ,() ,{} 的用法
[]一般用于单个匹配,如[a-z]表示a到z中的任意一个字符,[^456]表示出了456之外的任何字符,[a-o[A-O]]表示a-o或A-O中的任一字符。
()一般用于形成字符组,()内的字符按照顺序同时出现或同时不出现
{}用于限定修饰,如{n}代表出现n次,{n,}代表至少出现n次,{2,3}代表出现2-3次。

(3)限定修饰符:用于限定元字符出现的次数
如A+代表A出现1次或多次,A?代表A出现0次或一次 等

不做更深入的介绍,对于正则表达式的语法及元字符组成等参见正则表达式

3.7 字符串生成器

成功创建的String类对象,其长度是固定的,内容不能够被更改或编译。+ 运算符能够实现字符串的连接,但是需要产生一个新的String对象来存放连接后的字符串。因此介绍可变的字符序列StringBuilder类
StringBuilder类常用方法如下
(1)append()方法,用于向字符串生成器中追加内容,可以实现接受任何类型的数据。

public class TEST {
	public static void main(String[] args) {
		 StringBuilder sb = new StringBuilder("asdasdasd");
		 StringBuilder sb2 = new StringBuilder();
		 sb2.append("aasd").append("qweqwr").append(45).append(sb);
	}
}

(2)insert()方法

StringBuilder sb = new StringBuilder("asdasdasd");
sb.insert(4, "56454");//表示向第四个字符位置后插入字符串

(3)delete(int start, int end)方法
用于删除子字符串中的所有字符,从指定的start处开始,一直到索引end-1处结束
(4)toString方法
将StringBuilder类中存储的字符串以String类型返回
System.out.print(sb.toString())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值