字符串
String类 双引号括起来的 String s = “Enjoy!” ""表示空串
-
子串
String ss = s.substring(0,2); ss=“En”
substring(a,b) 子串位置是从0到2 ( 字符串从0开始计数 )
易于计算子串的长度: b-a -
拼接
String str = ss + s; ss和s都可以替换为直接的字符串”xxxx” -
不可变字符串
String类对象—不可变字符串
因为在Java中String对象是在一个共享的存储池中,变量指向存储池中的相应位置,若想改变其变量的内容,只能改变变量的指向,不能改变存储池中的数据(因为改变数据很麻烦,效率极低) ,所以叫做不可变字符串。
-字符串是否相等
ss.equals(s); 字符串ss与字符串s是否相等 ss,s可以是常量“xxx”
ss.equalsIgnoreCase(s); 不区分大小写判断是否相等
== 只能判断两个字符串是否在同一位置 若判断相等不可用
-
代码点与代码单元
s.length(); 代码单元数量(即为字符串的长度)
s.codePointCount(0,s.length()); 代码点数量(即为实际的长度)
s.charAt(a); a在0~s.length()-1之间 位置为a的代码单元(字符)
s.offsetByCodePoints(a,b) 得到以a位置偏移b个的代码点 再根据代码点求出代码单元 -
String类的方法 java.lang.stirng
- boolean endsWith(String suffix) 若字符串以suffix结尾,返回true
- int indexOf(String str)
- int indexOf(String str,int fromIndex)
- int indexOf(int cp)
- int indexOf(int cp,int fromIndex)
返回与字符串str或代码点cp匹配的第一个子串的开始位置,从索引0或者fromIndex开始计算。若在原始串中不存在str,返回-1
lastIndexOf与indexOf相似,最后一个子串的开始位置,从索引原始串尾端或fromIndex开始计算 - String substring(int beginIndex)
- String subString(int beginIndex,int endIndex)
返回一个新字符串(包含原始字符串从beginIndex到串尾endIndex-1的所有代码单位 - String toLowerCase() 返回一个新字符串,大写变小写
- String toUpperCase() 返回一个新的字符串,小写变大写
- String trim() 返回一个新字符串,删除了原始字符串头部和尾部的空格
务必用好API
-
字符串构建 java.lang.StringBuilder
StringBuilder builder = new StringBuilder(); 构建一个空的字符串构建器
builder.sppend(“sss”); 添加一部分内容 append()
builder.toString(); 用toString()构造字符串String类型
bulider.length(); 求出其构建器或者缓冲器的代码单位数量(长度)
builder.setCharAt(0,‘r’); 将builder中的第0个代码单元位置设置为‘r’ -
输入输出
- 读取输入 import java.util.*;
Scanner sc = new Scanner(System.in);
String line = sc.nextLine(); 输入一行 输入中可以包含空格
String word = sc.next(); 输入一个单词 以空白符’ 作为分隔符
sc.nextInt() 输入一个整数
sc.nextDouble() 输入一个浮点数
- 读取输入 import java.util.*;
import java.util.*;
/* 展示读取输入 */
public class InputTest{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("What is your name?");
String name = in.nextLine(); //输入第一个字符串
System.out.print("How old are you?");
int age = int.nextInt(); //输入第二个整数
System.out.println("Hello,"+name+",Next year,you'll be "+(age+1)); //输出Hello,XXX,Next year,you'll be XX
}
}
注意:从控制台读取密码使用Console类 每次只能读取一行输入 没有读取单个单词或数值的方法
(可能进行交互操作时使用,通过控制台窗口为交互的用户返回一Console对象,否则,返回null。
对于任一通过控制台窗口启动的程序,都可使用Console对象。否则,其可用性将与所使用的系统有关)
Console con = System.console();
String username = con.readLine("User name: ");
char[] passwd = con.readPassword("Password: "); 返回的密码放到了一维字符数组中,为了安全。
在对密码处理后,应该立即用一填充值覆盖数组元素(一会儿会提到)
java.util.Scanner.* 除上面提到的 补充:
- boolean hasNext() 检测输入中是否还有其他单词
- boolean hasNextInt()
- boolean hasNextDouble() 检测是否还有表示整数或浮点数的下一个字符序列
java.io.Console.*
- static char[] readPassword(String prompt,Object …args)
- static String readLine(String prompt,Object …args) 显示字符串prompt并读取输入,直到输入行结束。args参数设定输入格式(下一节讲)
- 格式化输出
- System.out…print()
- System.out.println()
- System.out.printf(“Hello,%s.Next year,you’ll be %d”,name,age); %s代表name参数,%d代表age参数
s,d为转换符
s 字符串 Hello
c 字符 H
b 布尔 True
h 散列码 42628b2
tx 日期时间
% 百分号 %
n 与平台有关的行分隔符
d 十进制整数 158
x 十六进制整数 9f
o 八进制整数 237
f 定点浮点数 15.8
e 指数浮点数 1.58e+01
g 通用浮点数
a 十六进制浮点数 0x1.fccdp3
System.out.printf("%8.2f",x) 用8个字符的宽度和小数点后两个字符的精度打印x 若x=1000.0/3.0 则输出为 3333.33(空格+3333.33 8个字符宽度 不够的用空格进行占位)
格式化输出标志 3333.33
+ +3333.33
空格 3333.33(空格+3333.33)
0 003333.33
- 3333.33(左对齐)
( (3333.33)将负数括在括号里
, 3,333.33 添加分组分隔符
# 3,333 对于f格式 包含小数点
# 0xcafe 对于x或o格式 添加前缀0x或0
$ 159 9F 给定被格式化的参数索引 %1
x 将以十进制和十六进制格式打印第一个参数
< 159 9F 格式化前面说明的数值 %d%<x以十进制和十六进制打印同一个数值
格式化字符串 String message = String.format(“Hello,%s.Next year,you’ll be %d”,name,age); 静态方法 不打印输出
- 文件输入输出
Scanner in = new Scanner(new File(“File.txt”); 构造一个File类去读取文件 文件输入
文件位于Java虚拟机启动路径的相对位置,也可使用绝对路径(在命令行方式下用java MyProg启动程序,启动路径为命令解释器的当前路径。集成开发环境下,启动路径由IDE控制,可使用String dir = System.getProperty(“user.dir”);
若文件中包含反斜杠符号 要在每一个反斜杠之前再添加一个反斜杠
PrintWriter out = new PrintWriter(“myfile.txt”); 写入文件 文件输出
注意:若用一个不存在的文件构造Scanner,或用一个不能被创建的文件名构造一个PrintWriter,会发生异常。Java认为这种异常比“被零整除“异常还严重
当知道有可能出现“找不到文件”的异常的时候,应该只编译器:抛出异常
public static void main(String[] args) throws FileNotFoundException{ Scanner in = new Scanner(new FIle("File.txt")); ...... }}
命令行方式下,可利用重定向将任一问价捆绑到System.in和System.out java MyProg<myfile.txt> output.txt 这样就处理了FileNotFoundException异常
java.util.Scanner.*
Scanner(String data) 构造一个从给定字符串读取数据的Scanner
java.io.PrintWriter.*
PrintWriter(String filename) 构造 一个将数据写入文件的PrintWriter 文件名有参数指定
-
补充: Date类型
Date d = new Date(); Mon Feb 09 18:05:19 PST 2004日期和时间的转换符 常用
c Mon Feb 09 18:05:19 PST 2004 完整的日期和时间
F 2004-02-09 ISO 8601日期
D 02/09/2004 美国格式的时间(月/日/年)
T 18:05:19 24小时时间
r 06:05:19 12小时时间printf方法特性:格式说明符语法
% 参数索引+$ 标志 宽度 .+精度或t 转换字符