StringBuilder和输入输出
构建字符串(StringBuilder的应用)
- 有些时候,需要由较短的字符串构建字符串,例如:按键或来自文件的单词,采用字符串连接的方式达到此目的效率比较低.每次连接字符串,都会构建一个新的String对象,既耗时,又浪费空间.使用
StringBuilder
类就可以避免这个问题的发生. - 如果需要用许多小段的字符串构建一个字符串,那么应该按照下列步骤进行.首先,构建一个空的字符串构建器:
StringBuilder builder = new StringBuilder();
,当每次需要添加一部分内容时,就调用append方法
builder.append(ch); //append a single character
builder.append(str); //append a string
- 在需要构建字符串时就调用
toString
方法,将可以得到一个String对象,其中包含了构建器中的字符序列.String completeString = builder.toString();
. - 下面的API包含了
StringBuilder
类的重要方法StringBuilder()
:构建一个空的字符串构造器.int length()
:返回构建器或缓冲器中的字符串个数.StringBuilder append(String str)
:追加一个字符串并返回this.StringBuilder append(char c)
:追加一个字符并返回this.StringBuilder appendCodePoint(int cp)
:追加一个代码点,并将其转换一个或两个代码单元并返回this.void setCharAt(int i,char c)
:将第i个字符设置为c.StringBuilder insert(int offset,String str)
:将字符串插入到此字符序列中.StringBuilder delete(int startIndex,int endIndex)
:删除此序列的子字符串中的字符.String toString()
:返回一个构建器或缓冲器内容相同的字符串.
输入输出
读取输入
- 打印输出到"标准输出流"(即控制窗口),使用
System.out.println
即可,那么要想通过控制台输入,首先需要构造一个Scanner
对象,并与"标准输入流"System.in
关联.
Scanner in = new Scanner(System.in);
- 使用Scanner类的各种方法实现输入操作,例如:nextLine方法将输入一行.
System.out.print("What is your name?");
String name = in.nextLine();
- 在这里,使用nextLine方法是因为在输入行中有可能包含空格,要想读取一个单词,以空格作为分隔符,就调用:
String firstname = in.next();
- 要想读取一个整数,调用nextInt方法
System.out.print("How old are you?");
int age = in.nextInt();
- 与此类似,要想读取一个浮点数,就调用nextDouble方法.
- 案例:询问姓名和年龄,然后打印信息
public class scan_demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//get first input
System.out.println("what is your name?");
String name = scanner.nextLine();
//get second input
System.out.println("How old are you?");
int age = scanner.nextInt();
//display ouput on console
System.out.println("Hello,"+name+",Next year,you'll be "+(age+1));
}
}
- 因为输入是可见的,所以Scanner类不适用于从控制台读取密码,因此使用Console类实现,输入的不可见性.
public class console_demo {
public static void main(String[] args){
Console cnsl = System.console();
if (cnsl != null) {
String alpha = cnsl.readLine("Name: ");
System.out.println("Name is: " + alpha);
char[] pwd = cnsl.readPassword("Password: ");
System.out.println("Password is: " + pwd);
}
}
}
使用cmd命令行运行,因为高级IDE无法调用系统控制台窗口.
采用Console对象处理输入不如采用Scanner方便,每次只能读取一行输入,而没有能够读取一个单词或一个数值的方法.
- Scanner类常见的方法总结
Scanner(InputStream in)
:用给定的输入流创建一个Scanner对象.String nextLine()
:读取输入的下一行内容.int nextInt()
:读取一个数字.String next()
:读取输入的下一个单词(以空格为分隔符).double nextDouble()
:读取并转换下一个表示整数或浮点数的字符序列.boolean hashNext()
:检测输入中是否还有其他的单词.boolean hashNextDouble()
:检测是否还有表示整数或浮点数的下一个字符序列.
格式化输出
- 可以使用
System.out.print(x)
将数值x输出到控制台.这条命令将以x对应的数据类型所允许的最大非0数字将x输出.例如
double x = 10000.0/3.0;
System.out.print(x); //3333.333333333333
如果希望显示美元,美分等符号,则有可能出现问题.
- 因此引入了格式化输出,
System.out.printf()
.例如:调用System.out.printf(%8.2f)
,使用8个字符的宽度和小数点后的精度打印x. - 在printf中,可以有多个参数,例如:
System.out.printf("Hello %s,Next year,you'll be %d", name , age);
- 每一个%字符开始的都是格式说明符,格式说明符尾部的转换符将指示格式化的数据类型.
- d:十进制整数
- x:十六进制整数
- o:八进制整数
- f:定点浮点数
- e:指数浮点数
- g:通用浮点数
- a:十六进制浮点数
- s:字符串
- c:字符
- b:布尔
- h:散列码
- tx或Tx:日期时间(已过期)
- %:百分号
- n:行分隔符
- 用于printf的标志
- +:打印整数和负数的符号
- 空格:在数的前面添加空格
- 0:数字前面补0
- -:左对齐
- (:将负数括在括号内.
- #:包含小数点(对于f格式)
- #:添加前缀0x或0(对于x或0格式)
- $:给定被格式化的参数索引.
- 可以使用静态的String.format方法创建一个格式化的字符串,而不打印:
String message = String.format("Hello %s,Next year,you'll be %d",name ,age);
.
文件的输入与输出
- 要想对一个文件进行读取,就需要用File对象构造一个Scanner对象,例如:
Scanner in = new Scanner(Paths.get("myfile.txt"),"UTF-8");
,如果文件名中包含反斜杠符号,就要在每个反斜杠之前额外再加一个反斜杠.
注意:这里有一个异常需要抛出,这时在main方法中用throw标记
public static void main(String[] args) throw IOException
{
Scanner in = new Scanner(Path.get("myfile.txt"),"UTF-8");
}
- 常用方法
Scanner(File f)
:构造一个给定文件读取数据的ScannerScanner(String data)
:构造一个从给定字符串中读取的ScannerPrintWriter(String fileName)
:构造一个将数据写入文件的PrintWriter.static Path get(String.pathname)
:根据给定路径创建一个Path.(Paths类中的方法)
StringBuilder和输入输出的更多相关文章
- java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;
<java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...
- JavaIO流(输入输出操作)
Java中执行输出和输入操作,需要通过IO流.例如最常见的System.out.println()就是一个输出流.IO流的类比较多,但核心体系就是由File. InputStream .OutputS ...
- Day 16:输入输出字符流、缓冲输入字符流
输入输出字节流输出字符时的常见问题 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- [译]DbContext API中使用SqlQuery和ExecuteSqlCommand获取存储过程的输入输出参数
水平有限,欢迎指正.原文:http://blogs.msdn.com/b/diego/archive/2012/01/10/how-to-execute-stored-procedures-sqlqu ...
- ECS Linux 服务器解除ssh登陆后被锁定或暂停输入输出的终端
在使用SSH终端(如Xshell)登陆时,若不慎点击 Ctrl + S 按键,会导致终端很像被锁定,输入和输出都无响应. 这是由于操作系统的终端收到指令 Ctrl + S 后,会暂停终端输入输出的刷 ...
- 计算机程序的思维逻辑 (30) - 剖析StringBuilder
上节介绍了String,提到如果字符串修改操作比较频繁,应该采用StringBuilder和StringBuffer类,这两个类的方法基本是完全一样的,它们的实现代码也几乎一样,唯一的不同就在于,St ...
- StringBuilder的使用
今天用到了StringBuilder来拼接查询语句,发现这个真好用,决定做个小结. 百度一个StringBuilder的定义:String 对象是不可改变的.每次使用 System.String 类中 ...
- linux中输入输出和重定向问题
输入输出解释 当我们执行shell的时候,每个进程都和三个打开的文件有关系,并使用文件描述符来引用这些文件.但这些文件不容易记忆,所以shell给了相应的文件名: 0:输入文件-标准输入(它的命令是输 ...
随机推荐
- 2020-2021-1 20209307《Linux内核原理与分析》第四周作业
一.Linux内核源代码简介 1.计算机三大法宝 存储程序计算机 函数调用堆栈 中断机制 2.操作系统两把宝剑 中断上下文的切换 进程上下文的切换 3.函数目录 Linux-3.18.6/arch/x ...
- DP-DAY3游记
问题 A: 2017夏令营第一阶段(Day3)问题A拆分数字I 题目描述 把数字N拆分一些正整数的和,问有多少种不同的方法? 例如:N=4,有1+1+1+1.1+1+2.1+2+1.1+3.2+ ...
- Netty源码解析 -- PoolSubpage实现原理
前面文章说了PoolChunk如何管理Normal内存块,本文分享PoolSubpage如何管理Small内存块. 源码分析基于Netty 4.1.52 内存管理算法 PoolSubpage负责管理S ...
- 轻松理解HTTP缓存策略
上一篇文章我写了koa-static的源码解析,其中用到了HTTP的缓存策略,给返回的静态文件设置了一些缓存的头,比如Cache-Control之类的.于是我就跟朋友讨论了一下HTTP的缓存策略: 朋 ...
- IIS本地部署局域网可随时访问的项目+mysql可局域网内访问
开端口即可 或者以下 原理 在本机的IIS下创建一个网站,文件目录直接指向Web项目文件夹 步骤 1.项目的启动项目为web 2.在iis中创建一个新的网站(Work_TK_EIS) 文件目录为web ...
- 使用NPOI读取Word文档内容并进行修改
前言 网上使用NPOI读取Word文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/mahongbiao/p/376 ...
- python序列(十)字典
字典是无序可变序列. 定义字典是,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号"{ }"中. 字典中的键可以为任意不可变数据,比如.整数.实数.复数.字 ...
- 5.装饰模式 Decorator (单一职责)
结合: Android设计模式 006 装饰者模式 [B站]对整个重构的细节讲的容易懂 Android的设计模式-装饰者模式 [简书]结合安卓源码讲的还可以,让我对context有更深入的理解 ...
- win shift s截图不能用(已解决)
win10上面 win shift s不能的原因是快捷键冲突导致的: 比如说你的电脑上安装了OneNode2016(讽刺的是这是微软自家的软件),或者其他截图软件都有可能导致快捷键冲突,从而不能使用. ...
- Ubuntu+KVM显卡透传
好久没有更新微博了,最近有点忙,大家见谅啊!今天带来的是我前段时间做的东西,也就是在 Ubuntu下做KVM虚拟机显科透传.(最近人有点懒,其实有几次是有时间更新的,但是就是懒得动,唉!得保持清醒不能 ...