知乎专栏 |
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)); }
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.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]", ""));
例如: 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); }