JAVA学习-字符串

本文详细介绍了Java中String类的使用,包括声明、创建字符串,连接字符串,获取字符串长度、查找信息,操作子字符串,去除空格,替换字符串,判断开头结尾,比较字符串,转换字母大小写,以及使用正则表达式。此外,还讲解了日期时间格式化和字符串生成器的效率比较。
摘要由CSDN通过智能技术生成

一、String类

1、声明字符串

格式:String s;

  • String:指定该变量为字符串类型
  • S:任意有效的标识符,表示字符串变量的名称

2、创建字符串

(1)String(char a[])

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

等价于String s="abcd";
(2)String(char a[],int offset,int length)
提取字符数组a中的一部分创建一个字符串对象。参数 offset表示开始截取字符的位置,length表示截取字符串的长度

char a[]={'a','b','c','d'};
String s=new String(a,1,4);

等价于String s="bcd";

(3)String(char [] value)

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

等价于String s="abcd";
例1:

//创建字符串
package String类;
public class1 {
    public static void main(String [] args) {
//		String s, s1;
//		s="ddada";
//		s1="dasfasf";
    	char s[]= {'s','a','d'};
    	String s1=new String(s);
		System.out.println(""+s1);
		
	}
}

二、连接字符串

1、连接多个字符串

//链接多个字符串
package 链接字符串;
public class2 {
   public static void main(String[]agrs) {
          String s1,s2;
          s1="你是煞笔";
          s2="你就傻逼";
          String s=s1+s2;
          System.out.println("你说你是不是傻逼:"+s +" 傻逼!!");
          
    }
}

Java中一句相连的字符串不能分开在两行中写。例如

System.out.println("I like
Java")

这种写法是错误的,如果一个字符串太长,为了便于阅读,可以将这个字符串分在两行上书写。比时就可以使用“+” 将两个字符串联起来,之后在加号处换行。因此,上面的语 句可以修改为:

Systerm.out.printn("I like'+
"Java);

2、连接其他数据类型

//连接其他数据类型
package 链接字符串;
import java.util.Scanner;
public class3 {
	private static Scanner sc;
	public static void main(String [] args){
        sc = new Scanner(System.in);
        int x;
        System.out.println("输入购买金额:");
        x=sc.nextInt();
        if(x<50) {
        	System.out.println("你输入的金额不足以支持你购买这件商品!!!");
        }else {
        System.out.println("你购买了一件"+"50元的衣服;" +"找你:"+(x-50)+"元");
        }
	}
}

三、获取字符串信息

1、获取字符串长度

格式:s.length();

//获取字符串长度
package 获取字符串信息;
public class4 {
   public static void  main(String[]agrs) {
        String s1="haoge";
        int s=s1.length();
        System.out.println("这个字符串长度为:"+s);
    }
}

2、字符串查找

(1)indexOf(String s)
格式:s.indexOf(a);

  • s:任意字符串对象
  • a:要搜索的字符串
    (2)lastIndexOf(String s)
    该方法用于返回指定字符串最后-次出现的索引位置。当调用字符串的lastIndexOf()方法时,会从当前字符串的开始位置检索参数字符串s, 并将最后次出现 s 的索引位置返回。如果没有 检索到字符串s,该方法返回-1。
    格式:s.lastIndexOf(a)
//字符串查找
package 获取字符串信息;
public class5 {
  public static void  main(String[]agrs) {
     String s1="haogegood";
     int s=s1.indexOf("g");//g字符在S1字符串的位置
     int s2=s1.lastIndexOf("g");//g字符在S1字符串的索引位置
     System.out.println("g在字符串S1的第几位:"+(s+1));
     System.out.println("g字符在S1字符串的索引位置:"+s2);
   }
}

  • 如果lastIndexOf(方法中的参数是空字符串"" (注意没有空格),则返回的结果与调用该字符串length0方法的返回结果相同。上述程序就可说明这个问题。

3、获取指定索引位置的字符串

格式:s.charAt(int index)
index:整型值,用于指定要返回字符的下标

//获取指定索引位置的字符
package 获取字符串信息;
public class6 {
  public static void main(String[]args) {
//	   int x[]= {1,2,3,4,5,6};
//	   int i=1;
//	   for(int s:x) {
//		   if(s==6) {
//			   System.out.printf("6在数组x的第%d位",i);
//		   }
//		   i++;
//	   }
	  String s="haogeliubi";
	  char x=s.charAt(5);
	  System.out.println("字符串中索引位置为5的字符是:"+x);
   }
}

四、字符串操作

1、获取子字符串

(1)substring(int beginIndex)
格式:s.substring(int beginIndex)

  • beginIndex指定从某一索引处开始截取字符串
    (2)substring(int beginIndex,int endIndex)
  • beginIndex:开始截取子字符串的索引位置
  • endIndex:子字符串在整个字符串中的结束位置
//获取子字符串
package 字符串操作;
public class7 {
     public static void main(String[]agrs) {
		String s="haoge",s2="www,baidu.com";
		String s1=s.substring(2),s3=s2.substring(0, 3);
		System.out.println(""+s1 +" " +s3);
	}
}

2、去除空格

格式:s.trim();

//去除空格
package 字符串操作;
public class8 {
   public static void main(String[]agrs) {
	  String s1,s2,s;
	  s1="  haige   ";s2="   huji    ";
	  s=s1.trim()+s2.trim();
	  System.out.println("S等于s1+s2除去空格的长度:"+s.length()+" S为:"+s);
  }
}

3、字符串替换

格式:s.replace(char oldChar,char newChar);

  • oldChar:要替换的字符或字符串
  • newChar:用于替换原来字符串的内容
//字符串替换
package 字符串操作;
public class9 {
   public static void main(String[]agrs) {
	   String s1,s2,s,s3;
	   s1="swdcsaw";s2="dsadf";
	   s3=s1+s2;
	   s=s3.replace(s1, s2);
	   System.out.println(s);
    }
}

4、判断字符串的开始和结尾

(1)startsWith()
格式:s.startsWith(String prefix)
prefix:指作为前缀的字符
(2)endsWith()
格式:s.endsWith(String suffix)
suffix:指作为后缀的字符串

//判断字符串的开始和结尾
package 字符串操作;
public class10 {
    public static void main(String[]args) {
		String s="85852422963",s2="4821582236";
		boolean a=s.startsWith("85"), b=s.endsWith("85"),c=s2.startsWith("85"),d=s2.endsWith("36");
		System.out.println("s字符串是以85开头的吗?"+a+" s字符串是以85结尾的吗?"+b+" s2字符串是以85开头的吗?"+c+" s2字符串是以36结尾的吗?"+d);
	}
}

5、判断字符串是否相等

(1)equals()
格式:s.equals(String otherstr)

  • 其中 s,otherstr是要比较的两个字符串对象
    (2)equalslgnoreCase()
    格式:s.equalslgnoreCase(String otherstr)
  • 其中 s,otherstr是要比较的两个字符串对象
//判断字符串是否相等
package 获取字符串信息;
public class7 {
    public static void main(String[]agrs) {
		String s1="haoge",s2="shuai!!";
		System.out.println(""+s1.equals(s2)+" "+s1.equalsIgnoreCase(s2));
	}
}

6、按字典顺序比较两个字符串

compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将此String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负数。
格式:s.compareTo(String otherstr)

//按字典顺序比较两个字符串
package 获取字符串信息;
public class8 {
   public static void main(String[]agrs) {
	    String s1="ABCD",S2="GFDC";
	    System.out.println(""+s1.compareTo(S2));//比较S1字符串第一个字符与S2字符串的第一个字符在字典的位置
   }
}

7、字母大小转换

(1)toLowerCase()(小写转换)
格式:s.toLowerCase()
(2)toUpperCase()(大写转换)
格式:s.toUpperCase()

//字母大小写转换
package 获取字符串信息;
public class9 {
    public static void main(String[]args) {
		String s1="ABDCE",s2="adefrgh";
		System.out.println(""+s1.toLowerCase()+" "+s2.toUpperCase());
	}
}

8、字符分割

(1)split(Stirng sign)
格式:s.split(String sign)
该方法可根据给定的分割符对字符串进行分割
格式:s.split(Sting sign)

  • sigh为分割字符串的分割符,也可以正则是表达式
    (2)split(String sign,int limit)
    格式:s.split(String sign,int limit)
  • limit为限制分割次数
//字符串分割
package 获取字符串信息;
public class10 {
    public static void main(String[]agrs) {
		String s1="abc|vfr|kij|oki";
		String[] s2,s3;
		s3=s1.split("\\|", 3);
		s2=s1.split("\\|");
		for(String a:s2) {
		  System.out.print("{"+a+"}");
		}
		System.out.println();
		for(String b:s3) {
			System.out.print("{"+b+"}");
		}
	}
}

五、格式化字符串

1、日期和时间字符串格式化

(1)日期格式化
做格式化之前一定要导入import java.util.*;类,然后在主方法里创建Date对象dateDate date=new Date();
常用日期格式化转换符如下表:

转换符说明示例
%te一个月中的某一天2
%tb指定语言环境的月份简称Feb(英语)、二月(中文)
%tB指定语言环境的月份全称February(英语)、二月(中文)
%tA指定语言环境的星期几全称Monday(英语)、星期一(中文)
%ta指定语言环境的星期几简称Mon(英语)、星期一(中文)
%tc包括全部日期和时间信息星期二 三月 25 13:37:22 CST 2008
%tY4位年份2008
%tj一年中的第几天085
%tm月份03
%td一个月中的第几天02
%ty2位年份08

(2)时间格式化

转换符说明示例
%tH2位数字的24时制的小时(00~23)14
%tI2位数字的12时制的小时(01~12)05
%tk2位数字的24时制的小时(0~23)5
%tl2位数字的12时制的小时(1~12)10
%tM2位数字的分钟(00~59)05
%tS2位数字的秒钟(00~60)12
%tL3位数字的毫秒数(000~999)920
%tN9位数字的微秒数(000000000~999999999)062000000
%tp指定语言环境下上午或下午标记下午(中文)、pm(英文)
%tz相对于GMT RFC 82格式的数字时区偏移量+0800
%tZ时区缩写形式的字符串CST
%ts1970-01-01 00:00:00至今经过的秒数1206426646
%tQ1970-01-01 00:00:00至今经过的毫秒数1206426737453
//日期和时间字符串格式化
package 格式化字符串;
import java.util.*;
public class10 {
    public static void main(String[]agrs) {
		Date date=new Date();
		String year=String.format("%tY", date), L=String.format("%tm", date)
		,R=String.format("%td", date), S=String.format("%tH", date),F=String.format("%tM", date),
		M=String.format("%tS", date),f=String.format("%tc", date);
		System.out.println(""+year+"年"+L+"月"+R+"日"+S+"时"+F+"分"+M+"秒");
		System.out.println("全部信息:"+f);
		
	}
}

(3)格式化常见的日期和时间组合

转换符说明示例
%tF“年-月-日” 格式(4位年份)2008-03-12
%tD“月/日/年”格式(2位年份)03/05/08
%tc全部日期和时间信息星期二 三月 25 15:20:00 CST 2008
%tr“时:分:秒PM(AM)“格式(12时制)03:22:06 下午
%tT”时:分:秒“格式(12时制)15:23:50
%tR”时:分“格式(24时制)15:25

2、常规类型格式化

转换符说明示例
%b,%B结果被格式化为布尔类型true
%h,%H结果被格式化为散列码A05A5198
%s,%S结果被格式化为字符串类型“abcd”
%c,%C结果被格式化为字符类型‘a’
%d结果被格式化为十进制40
%o结果被格式化为八进制11
%x,%X结果被格式化为十六进制4b1
%e结果被格式化为用计算机科学记数法表示的十进制数1.700000e+01
%a结果被格式化为带有有效位数和指数的十六进制浮点值0X1.C000000000001P4
%n结果为特定于平台的行分隔符
%%结果为字面值%%
//常规类型格式化
package 格式化字符串;
import java.util.Scanner;
public class11 {
	private static Scanner sc;
   public static void main(String []agrs) {
	   sc = new Scanner(System.in);
	   int m,n;
	   System.out.printf("输入数值M:");
	   m=sc.nextInt();
	   System.out.printf("输入比较数值N:");
	   n=sc.nextInt();
	   System.out.printf("输入数值M为%d,比较数值N为%d",m,n);
	   System.out.printf("\nM>=N?:%b",m>=n );
	   System.out.printf("\nm转换为八进制数为%o,n转换为十六进制数为%x",m,n);
    }
}

六、使用正则表达式

在这里插入图片描述

//使用正则表达式
package 使用正则表达式;
import java.util.*;
public class12 {
   private static Scanner sc;
   public static void main(String [] args) {
	   sc = new Scanner(System.in);
	   String regex="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
	   String s1;
	   System.out.printf("输入验证E-mail邮箱:");
	   s1=sc.next();
	   if(s1.matches(regex)) {
		   System.out.println(s1+"是一个合法的E-mail地址格式");
	   }else {
		   System.out.println(s1+"不是一个合法的E-mail地址格式");
	   }
    }
}

七、字符串生成器

//字符串生成器
package 字符串生成器;
import java.util.*;
public class13 {
       private static Scanner sc;
	public static void  main(String[]args) {
    	   int i,x;
    	   sc = new Scanner(System.in);
		    String s="";
		    System.out.printf("要创造多大的字符串:");
		    x=sc.nextInt();
		    long sTime=System.currentTimeMillis();
		    for(i=0;i<x;i++) {
		    	if(i%3==0) {
		    		s=s+'A';
		    	}
		    	else if(i%2==0) {
		    		s=s+'B';
		    	}else if(i%5==0) {
		    		s=s+'C';
		    	}else {
		    		s=s+'D';
		    	}
		    }
		    long eTime=System.currentTimeMillis();
		    long Time=eTime-sTime;
		    System.out.println("创造字符串消耗的时间"+Time+"S"+"  s为"+s);
		    sTime=System.currentTimeMillis();
		    StringBuilder s1=new StringBuilder("");
		    for(i=0;i<x;i++) {
		    	if(i/1==0) {
		    		s1.append('A');
		    	}else if(i%2==0) {
		    		s1.append('B');
		    	}else if(i%3==0) {
		    		s1.append('C');
		    	}else if(i%4==0) {
		    		s1.append('D');
		    	}else if(i%5==0) {
		    		s1.append('E');
		    	}else {
		    		s1.append('F');
		    	}
		    }
		    eTime=System.currentTimeMillis();
		    Time=eTime-sTime;
		    System.out.println("创造字符串消耗的时间"+Time+"S"+"  s1为"+s1);
	}
}

在这里插入图片描述
通过这一实例可以看出,两种操作执行的时间差距很大。如果在程序中频繁地附加字符串,建议使用StringBuidere新创建的StringBuilder对象初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则StringBuider对象将自动增加长度以容纳被附加的字符。若要使用StringBuilder最后输出字符串结果,可使用toString0方法。利用StringBuider类中的方法可动态地执行添加、删除和插入等字符串的编辑操作。该类的常用方法如下。
(1) appendO方法
该方法用于向字符审生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如训、boolean. char. Sring, double或者另个字符串生成器等。
语法如下:append(content)
其中,content 表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。
(2) insert(int offset, arg)方法

  • ofset:字符事生成器的位置。该参数必须大于等于0,且小于等于此序列的长度。
  • arg: 将插入至字符串生成器的位置。该参数可以是任何的数据类型或其他对象。
StringBuilder bf = new tringlilerT(hello");
bf.inser(5, "word");
System.outprintn(bftotring());

(3) delete(int start,int end)方法
移除此序列的子字符串中的字符。该子字符申从指定的stat处开始,一直到索引end- 1处的字符是不存在这种字符,则直到序列尾部。 如果start等于end,则不发生任何更改。
语法如下:delete(int start, int end)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值