| 知乎专栏 |
Java 11 增加了一系列的字符串处理方法,如以下所示。
// 判断字符串是否为空白 " ".isBlank(); // true // 去除首尾空格 " Javastack ".strip(); // "Javastack" // 去除尾部空格 " Javastack ".stripTrailing(); // " Javastack" // 去除首部空格 " Javastack ".stripLeading(); // "Javastack "
package cn.netkiller.test;
public class Test {
public static void main(String[] args) {
String string = new String("http://www.netkiller.cn");
System.out.println("查找字符 . 第一次出现的位置: " + string.indexOf('.'));
System.out.println("从第15个字符位置查找字符 . 出现的位置:" + string.indexOf('.', 15));
}
}
public String randomString(String chars, int length) {
Random rand = new Random();
StringBuilder buf = new StringBuilder();
for (int i = 0; i < length; i++) {
buf.append(chars.charAt(rand.nextInt(chars.length())));
}
return buf.toString();
}
/**
* 获取4位随机验证码
* @return
*/
public static String getValidationCode(){
return String.valueOf((new Random().nextInt(8999) + 1000));
}
/**
* 获取6位随机验证码
* @return
*/
public static String getValidationCode(){
return String.valueOf((new Random().nextInt(899999) + 100000));
}
import java.util.Random;
public class RandomNumberGenerator {
public static void main(String[] args) {
Random random = new Random();
// 生成1000到9999之间的随机整数
int randomNumber = random.nextInt(9000) + 1000;
System.out.println("生成的4位随机数字是:" + randomNumber);
}
}
public class RandomNumberGenerator {
public static void main(String[] args) {
// 生成1000到9999之间的随机整数
int randomNumber = (int) (Math.random() * 9000) + 1000;
System.out.println("生成的4位随机数字是:" + randomNumber);
}
}
import java.security.SecureRandom;
public class RandomNumberGenerator {
public static void main(String[] args) {
SecureRandom secureRandom = new SecureRandom();
// 生成1000到9999之间的安全随机整数
int randomNumber = secureRandom.nextInt(9000) + 1000;
System.out.println("生成的4位安全随机数字是:" + randomNumber);
}
}
import java.util.Random;
// 说明:此方法会生成一个0-9999的随机整数,然后利用String.format("%04d", number)将其格式化为长度为 4 的字符串,若数字不足 4 位,会在前面补0,例如0001、0123等。
public class RandomNumberGenerator {
public static void main(String[] args) {
Random random = new Random();
// 生成0到9999之间的随机整数
int randomNumber = random.nextInt(10000);
// 格式化为4位字符串,不足4位时在前面补0
String formattedNumber = String.format("%04d", randomNumber);
System.out.println("生成的4位随机数字字符串是:" + formattedNumber);
}
}
public class Test {
public Test() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("2010-09-11T20:00:30".replace("T", " "));
}
}
{"status":0,"message":"","bankcode":"ABOC;IBC;CCTB;ICBC"}
转换后
{\"status\":0,\"message\":\"\",\"bankcode\":\"ABOC;IBC;CCTB;ICBC\"}
package test;
public class str {
public static void main(String[] args) {
String jsonString = "{\"status\":0,\"message\":\"\",\"bankcode\":\"ABOC;IBC;CCTB;ICBC\"}";
System.out.println(jsonString);
System.out.println(jsonString.replace("\"", "\\\""));
}
}
package cn.netkiller.test;
public class Test {
public static void main(String[] args) throws InterruptedException {
System.out.println("我是小云,你是谁小策".replaceAll("小云|小策", ""));
}
}
查找特定字符并替换为找到的内容
package cn.netkiller.type;
public class ragexTest {
public ragexTest() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "<html>Netkiller</html>";
String regex = "<html>|</html>";
//运行结果返回 Netkiller
System.out.println(str.replaceAll(regex, ""));
// 运行结果返回 Neo
System.out.println("CN/NETKILLER/WWW/Neo_Chen".replaceAll(".*/(.+)_Chen", "$1"));
}
}
// 20200303 => 2020-03-03
date = date.replace(/(.{4})/, "$1-");
date = date.replace(/(.{7})/, "$1-");
用正则处理 Alertmanager 日期 rfc3339 格式 2021-08-23T01:30:30.2206015+08:00,Alertmanager 日期格式中有7位数的毫秒,使用 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") 无法正常读取。
package cn.netkiller.alertmanager;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
public class Test {
public Test() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
String rfc3339 = "2021-08-23T01:30:30.2206015+08:00";
rfc3339 = rfc3339.replaceAll(".[0-9]{7}", "");
System.out.println(rfc3339);
System.out.println(rfc3339.replaceAll("([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})+(.*)", "$1年$2月$3日 $4时$5分$6秒"));
System.out.println(rfc3339.replaceAll("([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2})+(.+)", "日期:$1 时间:$2"));
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
System.out.println(simpleDateFormat.parse(rfc3339).toString());
}
}
2021-08-23T01:30:30+08:00 2021年08月23日 01时30分30秒 日期:2021-08-23 时间:01:30:30 Mon Aug 23 01:30:30 CST 2021
替换一组字符串
String str1 = "广东省,福建省,北京市,海淀区,河北省,上海市";
str1 = str1.replaceAll("(省|市|区)", "");
System.out.println("替换多个中文:" + str1);
替换多个中文:广东,福建,北京,海淀,河北,上海
替换 Ascii
String string = "佛山市123南海区ABC精密abc机械有限公司,";
String clean = string.replaceAll("\\P{Print}", "");
System.out.println(clean);
Unicode 码表 https://www.ssec.wisc.edu/~tomw/java/unicode.html
String string = "2017-12-18 netkiller http://www.netkiller.cn - 网站正常";
System.out.println(string.replaceAll("[^\u4e00-\u9fa5]", ""));
Unicode 码表 https://www.ssec.wisc.edu/~tomw/java/unicode.html
String string = "2017-12-18 netkiller http://www.netkiller.cn - 网站正常"; String regex = "[\u4e00-\u9fa5]"; System.out.println(string.replaceAll(regex, ""));
public static String cleansing(String text) {
String replacement = "";
Pattern pattern = Pattern.compile("^[\\p{P}]", Pattern.MULTILINE);
Matcher matcher = pattern.matcher(text);
String result = matcher.replaceAll(replacement);
return result;
}
package cn.netkiller.test;
import java.util.List;
public class Test {
public Test() {
}
public static String replaceEnd(String string) {
char c = string.charAt(string.length() - 1);
if (List.of(',', ',', '、').contains(c)) {
string = string.substring(0, string.length() - 1);
}
return string;
}
public static void main(String[] args) throws Exception {
List.of("你好!", "你好,中国,", "Hello,", "Hello world!", "你在干啥么吗?没看到吗?", "这里真好").forEach(s -> {
System.out.println(replaceEnd(s));
});
}
}
你好! 你好,中国 Hello Hello world! 你在干啥么吗?没看到吗? 这里真好
例如: String str = "helloword!!!"; System.out.println(str.substring(1,4)); System.out.println(str.substring(3,5)); System.out.println(str.substring(0,4)); 将得到结果为: ell lo hell
Timestamp转化为String:
SimpleDateFormat df = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //定义格式,不显示毫秒
Timestamp now =
new Timestamp(System.currentTimeMillis());
//获取系统当前时间
String str =
df.format(now);
String转化为Timestamp:
SimpleDateFormat df = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = df.format(new
Date());
Timestamp ts = Timestamp.valueOf(time);
java11对String类新增了strip,stripLeading以及stripTrailing方法,除了strip相关的方法还新增了isBlank、lines、repeat(int)等方法
@Test
public void testStrip(){
String text = " \u2000a b ";
Assert.assertEquals("a b",text.strip());
Assert.assertEquals("\u2000a b",text.trim());
Assert.assertEquals("a b ",text.stripLeading());
Assert.assertEquals(" \u2000a b",text.stripTrailing());
}
package cn.netkiller.kubernetes;
public class Test {
public Test() {
}
public static void main(String[] args) {
String json = """
{
"name" : "netkiller",
"home" : "https://www.netkiller.cn/"
}
""";
System.out.println(json);
}
}
String[] string = topic.split("/");
Log.d("Service", string.length + "");
for (String str: string) {
Log.d("Service", str);
}
String str2 = new String("www.netkiller.cn");
for (String retval: str2.split("\\.", 3)){
System.out.println(retval);
}
System.out.println("");
String str3 = new String("acount=? and uu =? or n=?");
for (String retval: str3.split("and|or")){
System.out.println(retval);
}
package cn.netkiller.test;
import lombok.Data;
import java.io.IOException;
@Data
public class Test {
public static void main(String[] args) throws IOException {
System.out.printf("%02d%n", 1);
System.out.printf("%04d%n", 90);
System.out.println(String.format("%02d", 1));
System.out.println(String.format("%04d", 90));
}
}
01 0090 01 0090
package cn.netkiller.test;
import lombok.Data;
import java.io.IOException;
import java.text.DecimalFormat;
@Data
public class Test {
public static void main(String[] args) throws IOException {
int test = 520;
String paddedStr = String.format("%-6s", test).replace(' ', '0');
System.out.println("后补零:" + paddedStr);
}
}
后补零:520000
package cn.netkiller.test;
import lombok.Data;
import java.io.IOException;
import java.text.DecimalFormat;
@Data
public class Test {
public static void main(String[] args) throws IOException {
int test = 520;
System.out.println("================ 前补零 =================");
DecimalFormat decimalFormat = new DecimalFormat("000000");
String before = decimalFormat.format(test);
System.out.println("前补零:" + before);
DecimalFormat decimalFormat1 = new DecimalFormat("0.000");
System.out.println("================ 小数点后补零 =================");
String after = decimalFormat1.format(test);
System.out.println("后补零:" + after);
}
}
================ 前补零 ================= 前补零:000520 ================ 小数点后补零 ================= 后补零:520.000
String str1 = "Hello, World!";
List<String> str2 = Arrays.asList("World", "Hello");
boolean contains = str2.stream().anyMatch(str1::contains);
System.out.println("找到字符串:" + contains);
public static String escapeString(String input) {
if (input == null) return null;
return input
.replace("\\", "\\\\") // 转义反斜杠
.replace("\t", "\\t") // 转义制表符
.replace("\b", "\\b") // 转义退格符
.replace("\n", "\\n") // 转义换行符
.replace("\r", "\\r") // 转义回车符
.replace("\f", "\\f") // 转义换页符
.replace("'", "\\'") // 转义单引号
.replace("\"", "\\\""); // 转义双引号
}
// 使用示例 String original = "Hello\nWorld\t\"Java\""; String escaped = escapeString(original); System.out.println(escaped); // 输出: Hello\nWorld\t\"Java\"