初识Java 16-3 字符串

这篇具有很好参考价值的文章主要介绍了初识Java 16-3 字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

扫描输入(Scanner)

Scanner的分隔符

使用正则表达式扫描

StringTokenizer


本笔记参考自: 《On Java 中文版》


扫描输入(Scanner)

        先看看在Scanner类加入之前,Java是如何处理文件或标准输入的:

【例子:老版本的文本处理】

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;

public class SimpleRead {
    public static BufferedReader input =
            new BufferedReader(new StringReader(
                    "小红 \n22 1.4514"));

    public static void main(String[] args) {
        try {
            System.out.println("你的名字是什么?");
            String name = input.readLine();
            System.out.println(name);
            System.out.println("你几岁了?" +
                    "你最喜欢的浮点数是多少?");

            System.out.println("请输入:<年龄> <浮点数>");
            String numbers = input.readLine();
            System.out.println(numbers);
            String[] numArray = numbers.split(" ");
            int age = Integer.parseInt(numArray[0]);
            double favorite = Double.parseDouble(numArray[1]);
            System.out.format("你好,%s。%n", name);
            System.out.format("5年后你就" + (age + 5) + "岁了。");
            System.out.format("我最喜欢的浮点数是%f。", favorite / 2);
        }catch (IOException e){
            System.out.println("I/O exception");
        }
    }
}

        程序执行的结果是:

初识Java 16-3 字符串,Java,java,开发语言

        其中,用于接受输入的代码只有前几行:

初识Java 16-3 字符串,Java,java,开发语言

内部的StirngReader用于将输入转换为一个可读的流对象,这一对象最终被储存在了BufferedReader对象中。当我们需要使用时,可以配合BufferReaderreadLine()方法:

初识Java 16-3 字符串,Java,java,开发语言

        这种处理输入的方式在需要拆分输入时会变得尤为复杂(特别是在面对多行输入时):

初识Java 16-3 字符串,Java,java,开发语言

我们需要先将输入拆分成各个元素,然后逐一处理它们。

        Java 5的Scanner类减轻了处理输入的负担:

【例子:使用Scanner类处理输入文本】

import java.util.Scanner;

public class BetterRead {
    public static void main(String[] args) {
        Scanner stdin = new Scanner(SimpleRead.input);

        System.out.println("你的名字是什么?");
        String name = stdin.nextLine();
        System.out.println(name);

        System.out.println("你几岁了?" +
                "你最喜欢的浮点数是多少?");
        System.out.println("请输入:<年龄> <浮点数>");
        int age = stdin.nextInt();
        double favorite = stdin.nextDouble();
        System.out.println(age + " " + favorite);
        System.out.format("你好,%s。%n", name);
        System.out.format("5年后你就" + (age + 5) + "岁了。");
        System.out.format("我最喜欢的浮点数是%f。", favorite / 2);
    }
}

        程序执行,输出和之前的例子一致:

初识Java 16-3 字符串,Java,java,开发语言

        Scanner类版本繁多的构造器允许我们输入任何参数,包括FileInputStreamStringReadable等。

        另外,Scanner将输入、分词和解析这些操作都包含在了不同种类的“next”方法中。由于这些方法都只在输入流能够提供一个完整的数据分词时才进行返回,因此在不确定的情况下,可以使用对应的“hasNext”方法进行判断。

    Scanner没有返回IOException,这是因为这个类默认IOException表示输入结束。但我们依旧可以使用它的ioException()方法查看最近发生的异常。

Scanner的分隔符

        Scanner默认使用空格分割输入数据,但也可以使用正则表达式指定特殊的分隔符模式:

【例子:在Scanner中使用正则表达式】

import java.util.Scanner;

public class ScannerDelimiter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("12, 42, 78, 99, 42");
        scanner.useDelimiter("\\s*,\\s*");
        while (scanner.hasNextInt())
            System.out.println(scanner.nextInt());
    }
}

        程序执行的结果是:

初识Java 16-3 字符串,Java,java,开发语言

        这种处理方式同样适用于文件输入。


使用正则表达式扫描

        Scanner允许我们自定义正则表达式模式进行扫描,这在面对复杂的数据时很有用。

【例子:扫描防火墙日志,提取威胁数据】

import java.util.Scanner;
import java.util.regex.MatchResult;

public class ThreatAnalyzer {
    static String threatData =
            "51.12.12.32@08/08/2015\n" +
                    "204.45.234.40@08/10/2015\n" +
                    "58.27.82.161@08/11/2015\n";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(threatData);
        String pattern = "(\\d+[.]\\d+[.]\\d+[.]\\d+)@" +
                "(\\d{2}/\\d{2}/\\d{4})";
        while (scanner.hasNext(pattern)) {
            scanner.next(pattern);
            MatchResult match = scanner.match();
            String ip = match.group(1);
            String date = match.group(2);
            System.out.format(
                    "威胁:%s 来自 %s%n", date, ip);
        }
    }
}

        程序执行的结果是:

初识Java 16-3 字符串,Java,java,开发语言

        注意:由于这种模式只和下一个输入的分词进行匹配。因此在使用分隔符之前,需要注意是否与分词的格式相匹配。

StringTokenizer

        在正则表达式(Java 1.4)和Scanner类(Java 5)被引入之前,Java中对字符串进行拆分的工作大多由StringTokenizer负责。因此这里简单对比不同的技术:

【例子:与StringTokenizer进行比较】

import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class ReplacingStringTokenizer {
    public static void main(String[] args) {
        String input = "A B C D E F G";

        StringTokenizer stoke = new StringTokenizer(input);
        while (stoke.hasMoreElements())
            System.out.print(stoke.nextToken() + " ");
        System.out.println();

        System.out.print(Arrays.toString(input.split(" ")));
        System.out.println();

        Scanner scanner = new Scanner(input);
        while (scanner.hasNext())
            System.out.print(scanner.next() + " ");
    }
}

        程序执行的结果是:

初识Java 16-3 字符串,Java,java,开发语言

        若要以更复杂的形式拆分字符串,StringTokenizer会显得更为乏力。因此StringTokenizer在现在逐渐被淘汰了。文章来源地址https://www.toymoban.com/news/detail-723437.html

到了这里,关于初识Java 16-3 字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言字符串转换为16进制

    方法二:自定义转换函数 输出结果: 这两种方法都可以将C语言字符串逐个字符转换为对应的16进制表示。第一种方法使用了sprintf函数来格式化输出,第二种方法则是通过强制类型转换将字符转换为无符号字符(unsigned char),然后使用printf函数输出对应的十六进制表示。

    2024年02月05日
    浏览(59)
  • 对字符串中所有单词进行倒排-C语言/Java

    描述         输入一个字符串,输出字符串中单词的倒序。 要求 构成单词的字符只有26个大写或小写英文字母。 非构成单词的字符均视为单词间隔符; 倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔

    2024年02月12日
    浏览(48)
  • [开发|java] 将一个Java字符串按逗号分割成一个列表(List)

    可以使用Java的 split() 方法将字符串分割成字符串数组,然后将数组转换为列表。以下是一个示例代码: 输出 在上述代码中,我们使用 split(\\\",\\\") 方法将字符串 str 按逗号分割成一个字符串数组,然后使用 Arrays.asList() 方法将数组转换为列表。最后,我们打印输出列表的内容。

    2024年02月16日
    浏览(59)
  • 【华为OD机考 统一考试机试C卷】字符串变换最小字符串(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月20日
    浏览(64)
  • C语言二进制数据和16进制字符串互转

    知识点:结构体中的“伸缩型数组成员”(C99新增) C99新增了一个特性:伸缩型数组成员(flexible array member),利用这项特性声明的结构,其最后一个数组成员具有一些特性。第1个特性是,该数组不会立即存在。第2个特性是,使用这个伸缩型数组成员可以编写合适的代码,就

    2024年02月13日
    浏览(45)
  • Springboot使用Netty连接Tcp接口(c语言二进制字节码转java字符串)

    一、引入netty的jar包 io.netty netty-all 二、使用netty框架 1、创建客户端 package com.iflytek.digtal.netty; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel

    2024年02月20日
    浏览(50)
  • 【Py/Java/C++三种语言详解】LeetCode每日一题240109【动态规划】LeetCode2707题、字符串中的额外字符

    给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串,每个子字符串都在 dictionary 中出现过。 s 中可能会有一些 额外的字符 不在任何子字符串中。 请你采取最优策略分割 s ,使剩下的字符 最少 。 示例 1: 输入 :s =

    2024年01月16日
    浏览(49)
  • Java开发手册中为什么不建议在for循环中使用“+“进行字符串操作

    java开发手册中对于循环体中进行字符串的拼接要求如下: 【推荐】循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。 说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append操作, 最后通过 toString 方法返回

    2024年02月08日
    浏览(55)
  • 【华为OD机考 统一考试机试C卷】字符串序列判定/最后一个有效字符( C++ Java JavaScript python C语言)

    2023年11月份,华为官方已经将 华为OD机考:OD统一考试(A卷 / B卷)切换到 OD统一考试(C卷)和 OD统一考试(D卷) 。 真题目录:华为OD机考机试 真题目录(C卷 + D卷 + B卷 + A卷) + 考点说明 专栏:2023华为OD机试( B卷+C卷+D卷)(C++JavaJSPy) 华为OD面试真题精选:华为OD面试真题精

    2024年02月05日
    浏览(56)
  • 【华为OD机考 统一考试机试C卷】字符串摘要(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月22日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包