Java第五章第2节:常用实用类 字符串2 实验+图解讲解

简介

👨‍💻个人主页:@云边牧风
👨‍🎓小编介绍:欢迎来到云边牧风破烂的小星球🌝
📋专栏: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 ) 
将字符串从位置 start end (不包含 end 位置上的字符拷贝到数组 c[] 中,从数组 c[] 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练习

设计一个方法 int sumNum (String s) ,能够把字符串 s 里面的所有数字累加起来,并返回

代码见评论区

四、正则表达式

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” 代表09中的任何一个数字

在正则表达式中可以用方括号括起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符。

如:

[ 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 = “1949101日是中国成立的日子”;

 

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 中的任意字符组合都被看作一个分隔符

 

 如: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空格作为分割标记来解析字符串中的单词。

调用 next() 方法依次返回字符串中的单词
调用 hasNext () 方法判断是否解析结束
对于解析出的 数字单词 ,可以用 nextInt () 等转化为相应类型的数据
对于 非数字单词 ,如果用 nextInt () 等方法会发生 InputMismatchException 异常,在异常处理时可以调用 next() 方法返回非数字化单词

 练习:编写程序,分解出账单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 trim replaceAll subString 等方法时, 实质上是创建了一个新的实体,然后改变 String 对象的引用

例如:

String s = "  Hello! ";

s = s.trim();

中,有👇:

如果一个字符串经常发生改变,显然会浪费大量内存

StringBuffer 类能 创建可修改的字符串序列

 也就是说,该类的对象的实体的内存空间可以自动的改变大小,适合存放一个可变的字符序列。 

6.1StringBuffer类的构造方法

StringBuffer () :默认容量 16 个字符,可自动扩充
tringBuffer ( int size ) :指定容量 size
StringBuffer ( 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-1
StringBuffer 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里的时间与日期

喜欢的可以点赞+关注哈 ❤

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云边牧风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值