吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 983|回复: 5
收起左侧

[学习记录] 自学Java(JDK8)第五天--String类、Scanner 类

  [复制链接]
xiaotian1339 发表于 2022-4-4 22:32

自学Java-0基础到框架(JDK8)-day05

常用类

String类

创建字符串方法:
String str = "Hello";

String str2 = new String("Hello2");
  1. 对于str,编译器会使用该值创建一个String对象

  2. 如果使用new创建的字符串对象在堆上,如果String创建的字符串则存储在公共池中

  3. String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了,原因在于实例中的 String类的变量只是一个 String对象的引用,并不是对象本身,当执行str = "Hello World";时,创建了一个新的对象 "Hello World",而原来的 "Hello" 还存在于内存中。


长度 length() 方法:
String str = "Hello World";
System.out.println(str.length());
//输出 11

字符串链接concat()方法:
        String str1 = "Hello";
        String str2 = "World";
        String str = str1.concat(str2);
        System.out.println(str);
//输出 HelloWorld

创建格式化字符串

String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象

String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出

        String str = String.format("字符串变量%s %s" +
                "浮点型变量的值为 %f" +
                "整型变量的值为 %d", "Hello", "World",123.456,123);
        System.out.println(str);
//输出 字符串变量Hello World浮点型变量的值为 123.456000整型变量的值为 123

这里贴出菜鸟教程中写出的String类方法

方法


StringBuffer 和 StringBuilder 类

对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类,这两个类的对象能够被多次的修改,并且不产生新的未使用对象

这里贴出菜鸟教程的解释

在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。


StringBuilder
        StringBuilder sb = new StringBuilder(15);
        // 15 是初始容量
        sb.append("Hello");
        // 可以追加任意类型的数据
        sb.append(123);
        System.out.println(sb);
        sb.insert(5, "World");
        System.out.println(sb);
        sb.delete(5, 10);
        System.out.println(sb);
        sb.reverse();
        // 反转字符串
        System.out.println(sb);
        sb.reverse();
        // 反转字符串
        System.out.println(sb);
        sb.insert(5, "World");
        // 在第 5 个位置插入 World
        System.out.println(sb);
        sb.append(true);
        // 可以超出容量,但是不会报错
        System.out.println(sb);

输出:

Hello123
HelloWorld123
Hello123
321olleH
Hello123
HelloWorld123
HelloWorld123true

StringBuffer

然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类

因为目前还没了解到线程相关的知识,这里不进行线程方面的演示

StringBuffer 方法

fangfa

fangfa

String:字符串常量,字符串长度不可变。Java中String 是immutable(不可变)的。用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。

StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。Java.lang.StringBuffer 线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。

StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。

基本原则:

  • 如果要操作少量的数据用 String ;
  • 单线程操作大量数据用StringBuilder ;
  • 多线程操作大量数据,用StringBuffer。

JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么?

最简单的回答是,stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbuiler,除非你真的遇到了一个需要线程安全的场景,如果遇到了,请务必在这里留言通知我。

然后,补充一点,关于线程安全,即使你真的遇到了这样的场景,很不幸的是,恐怕你仍然有 99.99....99% 的情况下没有必要选择 stringbuffer,因为 stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异


Scanner 类

通过 Scanner 类来获取用户的输入

Scanner s = new Scanner(System.in)

可以使用next() 与 nextLine() 方法获取输入的字符串

next:

        Scanner s = new Scanner(System.in);
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (s.hasNext()) {
            String str = s.next();
            System.out.println(str);
        }
        s.close();

//输入 abcde fgh
//输出 abcde

nextLine:

        Scanner s1 = new Scanner(System.in);
        System.out.println("nextLine方式接收:");
        // 判断是否还有输入
        if (s1.hasNextLine()) {
            String str = s1.nextLine();
            System.out.println(str);
        }
        s1.close();
//Input: abcd efgh
//Output: abcd efgh

next() 与 nextLine() 区别

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。

nextLine():

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。

免费评分

参与人数 1吾爱币 +1 收起 理由
wyjl + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| xiaotian1339 发表于 2022-4-4 22:36
我的学习计划是一周完成Java最为基础的东西,然后开始学习面向对象基础(3~5天左右),然后更高级操作用法的就无法确定大概的时间了,学无止境
junminlu 发表于 2022-4-4 22:45
 楼主| xiaotian1339 发表于 2022-4-4 22:54
junminlu 发表于 2022-4-4 22:45
怎么自学啊?哪个网站?哪本书?加油啊

看的菜鸟教程和一些视频教程
yimeixiaokeai 发表于 2022-4-5 01:19
JAVA好难的啊
巅峰 发表于 2022-4-5 11:50
绝了 真学的很认真
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 13:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表