简介
👨💻个人主页:@云边牧风
👨🎓小编介绍:欢迎来到云边牧风破烂的小星球🌝
📋专栏:Java基础知识
🔑本章内容:Java常用实用类
记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~
接着上一节字符串的处理,这节讲的主要有字符串与基本数据的相互转化、对象的字符串表示、字符串与字符数组
一、字符串与基本数据的相互转化
1.1.使用基本类型的包裹类提供的静态方法:“parse类型”
Integer.parseInt("123");
Byte.parseByte(“4");
Short.parseShort("5");
Long.parseLong(“6");
Float.parseFloat(“7.17");
Double.parseDouble(“8.1888");
1.2.可以使用String类的类方法valueOf将数值转化为字符串。
public static String valueOf(boolean b)
public static String valueOf(char c)
public static String valueOf(int n)
public static String valueOf(long n)
public static String valueOf(float n)
public static String valueOf(double n)
如:
String str = String.valueOf(12313.9876);
二、对象的字符串表示
1.3Object类有一个public String toString()方法
可以获得该类对象的字符串表示。返回的字符串的一般形式为:
创建对象的类的名称@对象的引用的字符串表示
Object类的子类或间接子类也可以重写toString()方法,比如Date类就重写了该方法,重写的方法返回时间的字符串表示。
public class TV {
String name;
public TV() { }
public TV(String s) {
name=s;
}
public String toString() {
String oldStr=super.toString();
return oldStr+"\n这是电视机,品牌是:"+name;
}
}
写在一个Main里面为:
import java.util.Date;
class TV {
String name;
public TV() { }
public TV(String s) {
name=s;
}
public String toString() {
String oldStr=super.toString();
return oldStr+"\n这是电视机,品牌是:"+name;
}
}
public class Main {
public static void main(String[] args){
Date date = new Date();
System.out.println(date.toString());
TV tv = new TV("长虹电视");
System.out.println(tv.toString());
}
}
三、字符串与字符数组
1.4getChars
字符串实际上是由字符数组组成的,可以用 以下方法得到:
public void getChars (int start,int end,char c[ ],int offset )
注意:必须保证数组c能容纳下要被拷贝的字符数
1.5 public char[ ] toCharArray()
得到一个 字符数组 ,该数组的长度与字符串的长度相等。
public class Main {
public static void main(String[] args){
char [] a,b;
String s="1945年8月15日是抗战胜利日";
a=new char[4];
s.getChars(11,15,a,0);
System.out.println(a);
b="十一长假期间,学校都放假了".toCharArray();
for(int i=0;i<b.length;i++)
System.out.print(b[i]);
}
}
运行结果为:
抗战胜利
十一长假期间,学校都放假了
1.6 public byte[] getBytes()
使用 平台默认 的字符编码,将当前字符串转化为一个 字节数组
public class Main {
public static void main(String[] args){
byte d[]="Java你好".getBytes();
System.out.println("数组d的长度是:"+d.length);
String s = new String(d,4,3);
System.out.println(s); //输出:好
s=new String(d,0,7);
System.out.println(s); //输出:Java你
}
}
1.7 public byte[] getBytes(String charsetName)
charsetName :字符编码格式,比如 GB2312 、 GBK 、 UTF-8 、 ISO8859-1 等使用指定的字符编码,将当前字符串转化为一个 字节数组
import java.io.UnsupportedEncodingException;
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException {
byte d[]="Java你好".getBytes("GB2312");
System.out.println("数组d的长度是:"+d.length);
d="Java你好".getBytes("GBK");
System.out.println("数组d的长度是:"+d.length);
d="Java你好".getBytes("UTF-8");
System.out.println("数组d的长度是:"+d.length);
}
}
数组d的长度是:8
数组d的长度是:8
数组d的长度是:10
1.8练习
代码见评论区
四、正则表达式
4.1正则表达式:
一些具有特殊含义字符的集合,它指定了字符串的匹配规则
使用 String 类的 matches ( String regex ) 方法判断字符串是否匹配指定的正则表达式。public boolean matches( String regex )
如:
String s="lxxhdpu@163.com";
boolean b=s.matches("\\w{1,}@\\w{1,}\56\\w{1,}");
4.2元字符
元字符:正则表达式中的特殊字符,例如:“\d” 代表0到9中的任何一个数字
在正则表达式中可以用方括号括起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符。
如:
[ abc ] :代表 a 、 b 、 c 中任何一个;[^ abc ] :代表除了 a 、 b 、 c 以外的任何字符;[a- zA -Z] :代表英文字母(包括大小写)中任一个;[a-d] :代表 a 至 d 中任何一个;[a-d[m-p]] :代表 a~d ,或 m~p 中任何一个;[a-f&&[^ bc ]] :代表 a 、 d 、 e 、 f 中任何一个。
4.3验证E-mail格式的正则表达式:
String regex = "\\w{1,}@\\w{1,}\56\\w{1,}";//@前有至少一个标识符,@后和"."之间有至少一个标识符,"."后有至少一个标识符
“lixx@sina.com" 合法
“lixx@upc.edu.cn" 不合法
改进:regex = "\\w{1,}@\\w{1,}(\56\\w{1,}){1,}";
4.4字符串分解中的正则表达式:
String s = “1949年10月1日是中国成立的日子”;
String regex = "\\D+";
String digitWord[]=s.split(regex);
4.5练习
编写程序,剔除一个字符串中的全部非数字字符,例如,将形如“ab123you”的非数字字符全部剔除,得到字符串“123”。
public class E {
public static void main(String args[]) {
String str=“abc123you你是谁?”;
String regex=“\\D+”;
str=str.replaceAll(regex,””);
System.out.println(str);
}
}
运行代码评论区留言 发
五、StringTokenizer类
5.1字符串分析器
能够从一个字符串中根据指定的分隔符拆分出若干单词
在 java.util 包中,使用时需 import功能 类似 split ,但是比 split 强大, 允许指定若干个分隔符
5.2重载了两种构造方法:
StringTokenizer ( String s ) 使用 默认分隔符 集合,即:空格符、换行符、回车符、 Tab 符、进纸符
StringTokenizer ( String s, String delim ) 指定分隔符 集合, delim 中的字符被作为分隔符 。
如:delim="abc"那么:"a", "b", "c", "ab", "ac", "bc", "abc", "bca", "bac", "cba", "cbaacc"……都被看作一个分隔符。
5.3常用方法
String nextToken () :逐个 获取 字符串中的 单词boolean hasMoreTokens () :是否 还有未析取的单词int countTokens () : 统计 剩余的单词数
如👇:
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args){
String s = "Hello! I'm yaoming, nice to meet u!";
StringTokenizer st = new StringTokenizer(s,"!, ");
while (st.hasMoreTokens()) {
System.out.print(st.nextToken() + "/");
}
}
}
输出为:
Hello/I'm/yaoming/nice/to/meet/u/
5.4练习
编写程序,分解出字符串“you are welcome(thank you),nice to meet you” 中的全部单词并输出。
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args){
String s="you are welcome(thank you),nice to meet you";
StringTokenizer fenxi=new StringTokenizer(s,"() ,");
int number=fenxi.countTokens();
while(fenxi.hasMoreTokens()) {
String str=fenxi.nextToken();
System.out.print(str+" ");
}
System.out.println("共有单词:"+number+"个");
}
}
you are welcome thank you nice to meet you 共有单词:9个
六、Scanner类
字符串分析器,能够从一个字符串中解析出程序所需要的数据。
在 java.util 包中,使用时需 import
6.1、解析从键盘输入的数据
通过Scanner对象调用下列方法,读取用户输入的基本类型的数据:
n nextBoolean () 、 nextByte () 、 nextShort () 、 nextInt () 、nextLong()、nextFloat()、nextDouble()
n next() :以空格或回车键作为结束符n nextline () :以回车键作为结束符
如👇:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
System.out.println("请输入若干个数,每输入一个数回车确认");
System.out.println("最后输入数字0结束输入操作");
Scanner reader=new Scanner(System.in);
double sum=0;
double x = reader.nextDouble();
while(x!=0){
sum=sum+x;
x=reader.nextDouble();
}
System.out.println("sum="+sum);
}
}
6.2、使用默认分隔标记解析字符串
Scanner将空格作为分割标记来解析字符串中的单词。
练习:编写程序,分解出账单“TV cost 876 dollar.Computer cost 2398 dollar.telephone cost 1278 dollar.” 中的全部商品价格和总价格并输出。
import java.util.*;
public class Main {
public static void main(String[] args){
String cost= "TV cost 876 dollar.Computer cost 2398 dollar.telephone cost 1278 dollar.";
Scanner scanner = new Scanner(cost);
double sum=0;
while(scanner.hasNext()){
try{
double price=scanner.nextDouble();
sum=sum+price;
System.out.println(price);
}
catch(InputMismatchException exp){
String t=scanner.next();
}
}
System.out.println("总消费:"+sum+"元");
}
}
876.0
2398.0
1278.0
总消费:4552.0元
6.3、使用正则表达式作为分割标记解析字符串
Scanner对象可以调用方法
useDelimiter(正则表达式);
将正则表达式作为分割标记。
如:String regex=“[^0123456789.]+”
作为分割标记解析字符串,可以找出所有数字字符串
练习:编写程序,分解出“话费清单:市话费76.89元,长途话费167.38元,短信费12.68元” 中的各项话费和总话费并输出。
import java.util.*;
public class Main {
public static void main(String[] args){
String cost= "话费清单:市话费76.89元,长途话费167.38元,短信费12.68元";
Scanner scanner = new Scanner(cost);
scanner.useDelimiter("[^0123456789.]+");
double sum=0;
while(scanner.hasNext()){
try{
double price=scanner.nextDouble();
sum=sum+price;
System.out.println(price);
}
catch(InputMismatchException exp){
String t=scanner.next();
}
}
System.out.println("总通信费用:"+sum+"元");
}
}
76.89
167.38
12.68
总通信费用:256.95元
七、StringBuffer类
String对象是不可修改的,即String对象一旦创建,那么实体是不可以再发生变化的。
例如:
String s = " Hello! ";
s = s.trim();
中,有👇:
如果一个字符串经常发生改变,显然会浪费大量内存
也就是说,该类的对象的实体的内存空间可以自动的改变大小,适合存放一个可变的字符序列。
6.1、StringBuffer类的构造方法
StringBuffer () :默认容量 16 个字符,可自动扩充tringBuffer ( int size ) :指定容量 sizeStringBuffer ( String s ) :容量为 s 的长度外加 16 个字符
6.2、常用方法
append () : 追加 字符串,有许多重载方法
如:append(String s),append(int n),append(Object o)等
char charAt (int n) : 获取 指定位置字符void setCharAt (int n,char c) : 替换 指定字符StringBuffer insert (int n,String s) : 插入 字符串,将 s 插入到参数 n 指定的位置
StringBuffer reverse () : 翻转 字符串StringBuffer delete (int start,int end) : 删除 指定位置范围的字符,从 start 到 end-1StringBuffer replace (int start,int end ,String s) : 替换 指定位置范围的字符,从 start 到 end-1
如:
public class Main {
public static void main(String[] args){
StringBuffer str=new StringBuffer();
str.append("大家好");
System.out.println("str:"+str);
System.out.println("length:"+str.length());
System.out.println("capacity:"+str.capacity());
str.setCharAt(0 ,'w');
str.setCharAt(1 ,'e');
System.out.println(str);
str.insert(2, " are all");
System.out.println(str);
int index=str.indexOf("好");
str.replace(index,str.length()," right");
System.out.println(str);
}
}
str:大家好
length:3
capacity:16
we好
we are all好
we are all right
6.3练习
编写程序,判断输入的字符串s是否是回文串?
提示:回文字符串指的是正序倒序都一样,例如“aba”是回文串,输出“true”;“abb”不是,输出“false”。
import java.util.Scanner;
class palindromes {
public boolean palindrome(String s){
StringBuffer st=new StringBuffer(s);
return s.equals(st.reverse().toString());
}
}
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String s=in.nextLine();
palindromes p=new palindromes();
System.out.println(p.palindrome(s));
}
}
结束语:
以上是Jav第五章第2节的全部内容 希望大家喜欢
下一节开始讲第五章第3节:Java里的时间与日期
喜欢的可以点赞+关注哈 ❤