public static void main(String[] args) throws UnsupportedEncodingException {
String str = "abc";
// 将字符串转换成字节数组
// 默认按照当前工程的编码转换
// UTF-8中一个汉字占用3个字节
// GBK 一个汉字占用2个字节
byte[] bytes = str.getBytes("UTF-8");
System.out.println(bytes.length);
// for (byte b : bytes) {
// System.out.println(b);
// }
// 将字节数组转换成字符串
// String s = new String(bytes);
// 指定编码转换
// String s = new String(bytes, "utf-8");
// 截取部分字节数组
String s = new String(bytes, 0, 3, "utf-8");
System.out.println(s);
// 转换成大写
System.out.println(str.toUpperCase());
// 转换成小写
System.out.println(str.toLowerCase());
}
练习:输入一个字符串和一个数字,数字表示字节的个数。按照指定字节个数截取字符串。字符串采用GBK编码。
中国split 2--> 中 5 -->中国s 3 ->中
public static void main(String[] args) throws UnsupportedEncodingException {
// 输入一个字符串和一个数字,数字表示字节的个数。按照指定字节个数截取字符串。字符串采用GBK编码。
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
int n = scanner.nextInt();
// 将用户输入的字符串转换成字节数组
byte[] bs = str.getBytes("gbk");
// 判断截取的字节个数是否合法
if (n < 0 || n > bs.length) return;
// 按照指定的字节个数进行截取
String sub = new String(bs, 0, n, "gbk");
// System.out.println(sub);
// 判断是否有乱码
int index = sub.length() - 1;
if (sub.charAt(index) != str.charAt(index)){
sub = new String(bs,0,n - 1,"gbk");
}
System.out.println(sub);
}
String str = "abgrgrbfrhc";
// 字符串的哈希码是固定不变的
// 同一个字符串在任何条件下的哈希码一定是相同的,因为字符串是被共享的,所以要保证地址值一样
System.out.println(str.hashCode());
// 获取指定元素第一次出现的索引
// 如果找不到就返回-1
System.out.println(str.indexOf("abc"));
// 从fromIndex开始向后找
System.out.println(str.indexOf("gr",4));
练习:输入一个字符串以及一个子串,打印这个子串在字符串中出现的所有的位置
private static void method() {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
String subStr = scanner.next();
// 子串的位置
int index = 0;
while (index < str.length()){
index = str.indexOf(subStr,index);
if (index != -1){
System.out.println(index);
index++;
}else break;
}
}
String str1 = "abcdefga";
String str2 = new String("abc");
// intern()返回这个字符串的字面量值
System.out.println(str1 == str2.intern());
// 判断字符串是否为空 就是底层字节数组长度是否是0
System.out.println(str1.isEmpty());
// 判断字符串是否为空或者全是空格
System.out.println(str1.isBlank());
// 获取指定元素最后一次出现的索引
System.out.println(str1.lastIndexOf('a'));
// 从fromIndex索引向前找
System.out.println(str1.lastIndexOf('a',5));
// 替换字符
System.out.println(str1.replace('a','+'));
// 截取字符串 从beginIndex开始截取到字符串的最后
System.out.println(str.substring(3));
// 从beginIndex截取到endIndex 包头不包尾
System.out.println(str.substring(3,5));
// 删除字符串两端的空格
System.out.println(str.trim());
// 将int类型转换成字符串
String s = String.valueOf(10);
Object obj = new Object();
// 获取对象的地址
String s1 = String.valueOf(obj);
System.out.println(s1);
3 正则表达式
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
判断一个字符串是否是手机号或者是否是字母等模糊操作,可以使用正则表达式。来指定字符串的规则(格式)进行匹配。
public static void main(String[] args) {
// 判断一个字符串是否是abc
String str = "a4w";
// 指定规则
// Pattern pattern = Pattern.compile("abc");
// // 将规则和要判断的字符串进行关联
// Matcher matcher = pattern.matcher(str);
// // 进行判断 匹配上就是true,否则就是false
// System.out.println(matcher.matches());
// 匹配字符串 第一个字符是 a/b/c 第二个字符 1/4/6/8 第三个 q/w/e
Pattern p = Pattern.compile("[abc][1468][qwe]");
Matcher matcher = p.matcher(str);
System.out.println(matcher.matches());
// 简化格式
System.out.println(str.matches("[abc][1468][qwe]"));
// 匹配由一个小写字母组成的字符串
// 如果是连续的内容,可以用 - 连接
// a-z 小写字母 m - p
// 0-9 数字
System.out.println(str.matches("[a-z]"));
// 判断由一个字符组成的字符串,这个字符不是a/b/c
System.out.println(str.matches("[^abc]"));
}
// 匹配由3个字符组成的字符串,这个字符串开头是数字,结尾是字母
// . 通配符 可以表示任意一个字符
// \d 代表 0-9
// \s 代表空格 制表符 回车 换行 分页 都属于空格
// \w [a-zA-Z_0-9]
System.out.println(str.matches("\\d.[a-zA-Z]"));
// 匹配 .
System.out.println(str.matches("\\."));
// 匹配 \
System.out.println(str.matches("\\\\"));
- 数量词
// 数量词
// 匹配 ab abb abbb abbbb...
// + 表示之前的字符至少出现1次 >= 1
System.out.println(str.matches("ab+"));
// 匹配由字母开头后续是数字的字符串
System.out.println(str.matches("[a-zA-Z]\\d+"));
// 由数字作为开头和结尾的字符串 89
// * 表示之前的字符可有可无 >= 0
System.out.println(str.matches("\\d.*\\d"));
// 匹配+
System.out.println(str.matches("\\+"));
// 匹配*
System.out.println(str.matches("\\*"));
// 匹配一个不超过两位的数字组成的字符串
// ? 表示之前的字符最多出现一次 <= 1
System.out.println(str.matches("\\d\\d?"));
练习:
判断这个字符串是否是一个小数
5.23 5.0000000 00.23 不是 10. 不是 -5.67 是
// 匹配小数
System.out.println(str.matches("-?0\\.\\d+") | str.matches("-?[1-9]\\d*\\.\\d+"));
// 匹配由5个数字组成的字符串
// {n} 表示前面的字符出现恰好是n次 ==n
System.out.println(str.matches("\\d{5}"));
// 匹配由至少5个数字组成的字符串
// {n,} 表示前面的字符至少出现n次 >=n
System.out.println(str.matches("\\d{5,}"));
// 匹配由5-8个数字组成的字符串
// {n,m} 表示这个字符要出现至少n次,但不超过m次 n <= x<= m
System.out.println(str.matches("\\d{5,8}"));
练习: 输入一个字符串作为密码。要求是6-10位,由大写字母,小写字母,数字和空格组成。至少出现两种字符。
public static boolean checkPwd(String password){
// 密码的长度是 6 - 10位
if (!password.matches("[a-zA-Z\\d ]{6,10}"))
return false;
// 记录出现的字符的类型
int count = 0;
// 判断是否出现了小写字母
if (password.matches(".*[a-z].*"))
count++;
// 判断是否出现了大写字母
if (password.matches(".*[A-Z].*"))
count++;
// 判断是否出现了空格
if (password.matches(".* .*"))
count++;
// 判断是否出现了数字
if (password.matches(".*\\d.*"))
count++;
return count >= 2;
}
// 判断一个字符串中是否出现了3个及以上的连续数字
// 正则中判断 >= n 只需要判断=就可以 hbbhf567878gyhjn
System.out.println(str.matches(".*\\d{3}.*"));
// 判断字符串中是否出现了2个及以上的数字 rfegerg9grgrg8
System.out.println(str.matches(".*\\d.*\\d.*"));
- 捕获组
// 判断一个字符串中是否含有2个及以上的htrhresdg
// () 在正则中表示捕获组
// 捕获组可以看作一个字符进行操作
// \\n表示引用编号为n的捕获组
// 正则表达式会对捕获组进行自动的编号
// 编号是从1开始的
// 捕获组的编号是从 ( 出现的位置开始计算的
// (A((BC)D(E))F)(G)
// \\1 A((BC)D(E))F
// \\2 (BC)D(E)
// \\3 BC
// \\4 E
// \\5 G
System.out.println(str.matches(".*(htrhresdg).*\\1.*"));
// 判断叠字
System.out.println(str.matches("(.)\\1+"));
// AABB结构
System.out.println(str.matches("(.)\\1(.)\\2"));
// ABAB结构
System.out.println(str.matches("(..)\\1"));
- replaceAll
String str1 = "tht;btgbt;grgr;grgr";
// 将所有的数字替换成-
// 参数一是正则表达式
// 参数二是要替换的字符
System.out.println(str1.replaceAll("\\d","-"));
// 提取字符串中所有的数字
System.out.println(str1.replaceAll("\\D",""));
// 替换字符串中所有的非字母
System.out.println(str1.replaceAll("[^a-zA-Z]",""));
- 练习:输入一个字符串,提取其中所有的数字并排序
// 输入一个字符串,提取其中所有的数字并排序
String str = new Scanner(System.in).next();
// 提取数字
str = str.replaceAll("\\D","");
// 把字符串转换成字符数组
char[] chars = str.toCharArray();
// 排序
Arrays.sort(chars);
System.out.println(chars);
- 输入一个字符串,统计每一个字符出现的次数
// 输入一个字符串,统计每一个字符出现的次数
// aabbbccdda
String str = new Scanner(System.in).next();
while (str.length() != 0){
// 获取替换之前的字符串长度
int oldLen = str.length();
// 获取字符串的第一个字符
char c = str.charAt(0);
str = str.replaceAll(c + "","");
// 获取替换之后的字符串长度
int newLen = str.length();
System.out.println("字符" + c + "出现的个数是" + (oldLen - newLen));
}
- 匹配邮箱
大小写字母数字_组成6,20位@xxx.com
大小写字母数字_组成@xxx.cn
大小写字母数字_组成@xxx.com.cn
System.out.println(str1.matches("\\w{6,20}@\\w+(\\.com)") | str.matches("\\w{6,20}@\\w+(\\.com)?(\\.cn)"));
String str2 = "小龙女 杨过 尹志平 欧阳锋";
System.out.println(str2.replaceAll("(.*)(杨过)(.*)(欧阳锋)","$1$4$3$2"));
// 叠字变成单字
String str3 = "我我我我爱爱爱爱爱你你你你你你你";
System.out.println(str3.replaceAll("(.)\\1+","$1"));
split
String str4 = "778jy6666kj5kl6jkgh8gth9678676754";
// 字符串的分割
// String[] split = str4.split(",");
// for (String s : split) {
// System.out.println(s);
// }
// 无论有多少个,放在结尾的分隔符都会被直接切掉
// 放在开头的分隔符会切出"",有几个切几个
// 放在中间连接的分隔符,会切出一个""
String[] split = str4.split("\\d");
for (String s : split) {
System.out.println(s);
}
标签:String,System,字符串,str,println,out
From: https://www.cnblogs.com/460759461-zeze/p/18218456