1. 字符编码
字符编码:
- ASCII编码采用1 Byte,8 bits,最多256个字符
– ASCII无法适应其他地方,如汉字数量有十几万 - 扩展编码(加字节)
• ISO8859(1-15) 西欧语言
• GB2132, GBK,GB18030 ASCII+中文
• Big5 ASCII + 繁体中文
• Shift_JIS ASCII+日文
• …… - Unicode 编码
:不断扩充,存储全世界所有的字符
– UTF-8,兼容ASCII,变长(1-4个字节存储字符),经济,方便传输
– UTF-16,用 变长(2-4个字节)来存储所有字符
– UTF-32,用32bits(4个字节)存储所有字符
Java的字符编码
源文件编码(.java):采用UTF-8编码
– Eclipse,右键java文件,属性,resource,选择UTF-8
– Eclipse,右键项目,属性,resource,选择UTF-8
程序内部:采用UTF-16编码存储所有字符(不是程序员控制)
- 和外界(文本文件)的输入输出尽量采用UTF-8编码,不能使用一种编码写入,换另外一种编码读取
2. 高级字符串处理
2.1 正则表达式(regular expression)
:描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
–作用
• 测试字符串内的模式
• 识别/替换文本
• 提取文本
正则表达式的匹配模板:正则表达式语法链接
–定界符
–原子
–特殊功能字符(元字符)
–模式修正符
- 正则表达式独立于特定语言(Java, Perl, Python, PHP…)
2.1.1 Java的正则表达式
java.util.regex包
–Pattern正则表达式的编译表示
• compile 编译一个正则表达式为Pattern对象
• matcher 用Pattern对象匹配一个字符串,返回匹配结果
–Matcher
• Index Methods(位置方法) // start(), start(int group), end(), end(int group)
• Study Methods(查找方法) // lookingAt(), find(), find(int start), matches()
• Replacement Methods(替换方法) //replaceAll(String replacement)
lookingAt(),matches()
package regex;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class MatchesLooking {
private static final String REGEX = "foo";
private static final String INPUT =
"fooO";
private static Pattern pattern;
private static Matcher matcher;
public static void main(String[] args) {
// Initialize
pattern = Pattern.compile(REGEX);
matcher = pattern.matcher(INPUT);
System.out.println("Current REGEX is: "
+ REGEX);
System.out.println("Current INPUT is: "
+ INPUT);
System.out.println("lookingAt(): "
+ matcher.lookingAt()); //部分匹配
System.out.println("matches(): "
+ matcher.matches()); //完全匹配
}
}
replaceAll()
package regex;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class ReplaceDemo {
private static String REGEX = "dog";
private static String INPUT =
"The dog says meow. All dogs say meow.";
private static String REPLACE = "cat";
public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
// get a matcher object
Matcher m = p.matcher(INPUT);
INPUT = m.replaceAll(REPLACE); //把所有的dog都换成cat
System.out.println(INPUT);
}
}
3. 其他字符串的操作
- 字符串和集合互转
–[1,2,3], “1,2,3”
– String.join() - 字符串转义
–对关键字符转义 - 变量名字格式化
–名字驼峰命名
– CaseFormat.UPPER_UNDERSCORE.to(); - 字符串输入流
–将字符串转为一个输入流
–IOUtils.toInputStream()