构建字符串(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类的重要方法
    1. StringBuilder():构建一个空的字符串构造器.
    2. int length():返回构建器或缓冲器中的字符串个数.
    3. StringBuilder append(String str):追加一个字符串并返回this.
    4. StringBuilder append(char c):追加一个字符并返回this.
    5. StringBuilder appendCodePoint(int cp):追加一个代码点,并将其转换一个或两个代码单元并返回this.
    6. void setCharAt(int i,char c):将第i个字符设置为c.
    7. StringBuilder insert(int offset,String str):将字符串插入到此字符序列中.
    8. StringBuilder delete(int startIndex,int endIndex):删除此序列的子字符串中的字符.
    9. 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 inputSystem.out.println("what is your name?");String name = scanner.nextLine();//get second inputSystem.out.println("How old are you?");int age = scanner.nextInt();//display ouput on consoleSystem.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类常见的方法总结

    1. Scanner(InputStream in):用给定的输入流创建一个Scanner对象.
    2. String nextLine():读取输入的下一行内容.
    3. int nextInt():读取一个数字.
    4. String next():读取输入的下一个单词(以空格为分隔符).
    5. double nextDouble():读取并转换下一个表示整数或浮点数的字符序列.
    6. boolean hashNext():检测输入中是否还有其他的单词.
    7. 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):构造一个给定文件读取数据的Scanner
    • Scanner(String data):构造一个从给定字符串中读取的Scanner
    • PrintWriter(String fileName):构造一个将数据写入文件的PrintWriter.
    • static Path get(String.pathname):根据给定路径创建一个Path.(Paths类中的方法)

StringBuilder和输入输出相关推荐

  1. java class 字符串_java基础知识四 math类 字符 字符串 控制台输入输出 StringBuilder与StringBuffer...

    第四章:数学函数.字符和字符串 math类 Math是final类:在java.lang.Math中,所有数学函数都是静态方法 在一个java程序中,java.lang包中的所有类是隐式导入的. 三角 ...

  2. java判断输入的格式化_Java的字符串及格式化输入输出

    Java的字符串及格式化输入输出 1.String的不可变 在浅析Java的jvm上的内存位置的分配里已经说明,String使用了常量池技术,所以在栈中的应用要么是指向常量池,要么是指向堆,Strin ...

  3. android 特色输入输出

    视频课:https://edu.csdn.net/course/play/7621 学习内容 Ø Android中的手势识别 Ø Android中的语音朗读 能力目标 Ø 熟练掌握如何通过手势缩放图片 ...

  4. Java学习笔记(7)——输入输出

    1.File 不同的操作系统对于档案系统路径的设定各有差别,例如在Windows中,一个路径的表示法可能是: "c:\\Windows\\Fonts\\" 而在Linux下的路径设 ...

  5. 【Java】深入剖析Java输入输出的那些细节

    前言 无论是新手入门的命令行输入输出,还是说OJ的读入和输出,离不开基本的IO操作. 但Java本身由于纯粹的面向对象,输入输出不方便,所以我们倒不妨探讨一番. 其实输入输出真实是所有学Java的入门 ...

  6. 华为OD机试ACM输入输出

    ACM模式 华为OD机考是基于牛客平台进行的,且必须采用ACM模式 ACM模式: 机试系统调用你的代码时,传入的都是字符串,题目的输入描述会说明字符串的组成规则,你需要根据这些规则从输入字符串中解析出 ...

  7. java字符串与输入输出

    java字符串与输入输出 Java 没有内置的字符串类型, 而是在标准Java 类库中提供了一个预定义类, 很自然地叫做String.每个用双引号括起来的字符串都是String 类的一个实例: Str ...

  8. Java第12篇输入输出I/O和ASCII码

    Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符. Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不 ...

  9. android入门基础视频教程特色输入输出

    视频课:零基础学安卓Android移动开发 学习内容 Ø Android中的手势识别 Ø Android中的语音朗读  能力目标 Ø 熟练掌握如何通过手势缩放图片 Ø 掌握手势文件的创建方法及技巧 Ø ...

最新文章

  1. Ubuntu中的颜色选择器实用程序(彩色移液器)[关闭]
  2. kafka环境安装及简单使用(单机版)
  3. C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数
  4. QML编程之旅 -- 元素布局
  5. 一起认识FileShare
  6. 解决虚拟机能ping通宿主机,而宿主机不能ping通虚拟机
  7. C#位图BitArray 小试牛刀
  8. Java 8陷阱–提防Files.lines()
  9. LeetCode 1944. 队列中可以看到的人数(单调栈)
  10. win+mysql自动备份吗_Windows下mysql自动备份的最佳方案
  11. 斗地主AI算法——第十一章の被动出牌(5)
  12. jquery打造一款侧边弹出的垂直导航
  13. React基础篇(三)之 webpack打包项目配制
  14. netty的使用场景,线程模型以及如何在springboot中使用netty?
  15. 【Shiro第九篇】SpringBoot + Shiro整合JWT
  16. 【C++】凯撒密码 实现加密与解密
  17. GraphQL 总结 + 在Django应用(Graphene)
  18. 对递归的理解【笔录】
  19. java实验:矩形类的定义与封装
  20. 右手螺旋判断磁感应强度方向_如何判断磁感应强度方向 方法是什么

热门文章

  1. 面部AR遥控器:使用AR制作动画
  2. matlab | 程序运行时间
  3. (附源码)计算机毕业设计SSM科技类产品众筹系统
  4. 102.(leaflet篇)leaflet态势标绘-分队战斗行动修改 (燕尾)
  5. 爱签:行业利好不断 电子签章、电子合同将扩大应用
  6. PYTHON库,让你相见恨晚的第三方库
  7. OpenCV-霍夫线变换
  8. Hadoop+hive+flask+echarts大数据可视化项目之hive环境搭建与系统数据的分析思路
  9. 广告业务系统 之 数据中转站 —— “日志中心-实时服务监控”
  10. 计算方法(五)函数插值