首页 > 其他分享 >JTCR-正则、反射和文本格式化-24 (end)

JTCR-正则、反射和文本格式化-24 (end)

时间:2024-04-24 15:11:07浏览次数:34  
标签:24 JTCR end DateFormat df System println public out

正则

Pattern 类用于定义正则表达式,Matcher 类用于匹配正则表达式。

Pattern 没有构造器,使用工厂方法 compile() 创建模式(pattern)。

static Pattern compile(String pattern)

它将字符串转换成 Matcher 可以使用的正则表达式。Pattern 的 matcher() 方法创建 Matcher。

Matcher matcher(CharSequence str)

str 表示和模式匹配的字符串,CharSequence 接口定义只读字符序列。

Matcher 没有构造器,它的方法用于模式匹配操作。如果模式和整个字符串匹配,则 matches() 方法返回 true,否则返回 false;如果模式和字符串的某个子串匹配,find() 方法返回 true,否则返回 false,该方法可以重复调用,每次从上次匹配子串的下一个索引开始;group() 方法返回最后一个匹配的子串;start() 方法返回当前匹配的索引;end() 方法返回当前匹配的下一个索引;replaceAll(String newStr) 方法替换所有匹配的子串,然后返回替换后的字符串。

[xyz] 匹配方括号中任意一个字符,可以指定范围 [a-e],取反使用 ^,比如 [^a-e]. 匹配任意字符。限定符如下

  • + 匹配 1 或多个字符,x+
  • * 匹配 0 或多个字符,x*
  • ? 匹配 0 或 1 个字符,x?
public static void m() {
  Pattern p = Pattern.compile("xyz");
  Matcher m = p.matcher("xyz");
  // true
  boolean f = m.matches();
  
  m = p.matcher("xyza");
  // false 必须整个字符串精确匹配
  f = m.matches();
  // 返回 true,存在子串可以匹配
  m.find();
  
  p  = Pattern.compile("txt");
  m = p.matcher("txt345txt");
  // 输出 
  // 0
  // 6
  while (m.find()) {
    System.out.println(m.start())
  }
}
public static void m() {
  Pattern p = Pattern.compile("w+");
  Matcher m = p.matcher("w ww www");
  // 匹配 1 或多个 w,+ 和前面的字符作为一个整体
  // w
  // ww
  // www
  while (m.find()) {
    System.out.println(m.group());
  }
  
  p = Pattern.compile("e.+d");
  m = p.matcher("end extend");
  // 匹配按照贪婪原则,尽可能长的匹配
  // end extend
 	while (m.find()) {
    System.out.println(m.group());
  }
  
  p = Pattern.compile("e.+?d");
  m = p.matcher("end extend");
  // 加 ? 表示最短匹配
  // end
  // extend
  while (m.find()) {
    System.out.println(m.group());
  }
  
  p = Pattern.compile("[a-z]+");
  m = p.matcher("this is a test");
  // this
  // is
  // a
  // test
  while (m.find()) {
    System.out.println(m.group());
  }
  
  String s = "abc asli aouojl aobso";
  p = Pattern.compile("a.*? ");
  m = p.matcher(s);
  String r = m.replaceAll("b ");
  // b b b aobso
  System.out.println(r);
  
  // one two three four
  p = Pattern.compile("[ ,.]+");
  String[] str = p.split("one two,three.four");
  for (String e : str) {
    System.out.print(e + " ");
  }
}

如果只执行一次模式匹配,可以使用 Pattern 的 matches() 方法。

// pattern 编译后是否匹配 str 返回 true/false
static boolean matches(String pattern, CharSequence str)

String 的 matches() 方法也可以使用。

// 调用该方法的字符串是否匹配 pattern
boolean matches(String pattern)

反射

Member 接口定义的方法可以获取类属性、构造器或者方法的信息。

描述
AccessibleObject 绕过默认访问控制检查
Array 动态创建和操作数组
Constructor 构造器信息
Executable Method 和 Constructor 继承的抽象类
Field 属性信息
Method 方法信息
Modifier 类和方法的访问修饰符信息
Parameter 参数信息
Proxy 支持动态代理类
ReflectPermission 允许反射类的私有和 protected 成员
public static void main(String[] args) {
		try {
			Class<?> class1 = Class.forName("java.awt.Dimension");
			Constructor<?>[] constructors = class1.getConstructors();
			for (int i = 0; i < constructors.length; i++) {
				System.out.println(constructors[i]);
			}
			Field[] fields = class1.getFields();
			Method[] methods = class1.getMethods();
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
}
class Tested {	
	public void pub() {};
	private void pri() {};
	protected void pro() {};
}

public static void m() {
  Tested a = new Tested();
	Class<? extends Tested> class1 = a.getClass();
  // 获取类自己定义的方法,不包括继承的方法
	Method[] methods = class1.getDeclaredMethods();
  // 输出 pub
	for (int i = 0; i < methods.length; i++) {
    // 返回方法的修饰符,以整数表示
		int modifiers = methods[i].getModifiers();
		if (Modifier.isPublic(modifiers)) {
			System.out.println(methods[i].getName());
		}
	}
}

文本格式化

DateFormat 抽象类提供了用于格式化日期和时间的功能。它的 getDateInstance(int style, Locale locale) 方法是重载方法之一,返回的实例用于格式化日期。其中,style 的取值为 DateFormat 定义的 int 常量:DEFAULT/SHORT/MEDIUM/LONG/FULL 中的一个,表示不同形式的日期。locale 则和本地化有关。它的 format(Date d) 方法返回已格式化的日期,类型为 String。

public class DateFormatDemo {

    public static void main(String[] args) {
        Date date = new Date();
        DateFormat df = null;

        df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);
        // 23-7-16
        System.out.println(df.format(date));
        df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);
        // 2023-7-16
        System.out.println(df.format(date));
        df = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);
        // 2023年7月16日
        System.out.println(df.format(date));
        df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.JAPAN);
        // 2023/07/16
        System.out.println(df.format(date));
        df = DateFormat.getDateInstance(DateFormat.LONG, Locale.KOREA);
        // 2023년 7월 16일 (일)
        System.out.println(df.format(date));
    }
}

它的 getTimeInstance(int style, Locale locale) 方法返回的实例用于格式化时间,参数取值和作用类似于先前所述,此时作用于时间。

public class TimeFormatDemo {

    public static void main(String[] args) {
        Date date = new Date();
        DateFormat df = null;

        df = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA);
        // 下午9:48
        System.out.println(df.format(date));
        df = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA);
        // 21:48:46
        System.out.println(df.format(date));
        df = DateFormat.getTimeInstance(DateFormat.LONG, Locale.CHINA);
        // 下午09时48分46秒
        System.out.println(df.format(date));

        df = DateFormat.getTimeInstance(DateFormat.LONG, Locale.JAPAN);
        // 21:48:46 CST
        System.out.println(df.format(date));
        df = DateFormat.getTimeInstance(DateFormat.LONG, Locale.KOREA);
        // 오후 9시 48분 46초
        System.out.println(df.format(date));
    }
}

它的 getDateTimeInstance(int style, Locale locale) 方法返回的实例用于格式化日期和时间。

SimpleDateFormat 类是 DateFormat 类的子类,可以自定义日期和时间格式。构造器 SimpleDateFormat(String fmtStr) 中,fmtStr 表示自定义的日期和时间格式。取值如下

符号 说明
a AM 或 PM
d 月中某一天(1-31)
h AM/PM 表示的小时(1-12)
k 一天中某一小时(1-24)
m 一小时中某一分钟(0-59)
s 一分钟中某一秒(0-59)
u 一周某一天,1 表示星期一
w 一年中某一周(1-52)
y
z 时区
D 一年中某一天(1-366)
E 一周中某一天(例如,Monday)
public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = null;
        sdf = new SimpleDateFormat("hh:mm:ss");
        // 10:06:49
        System.out.println(sdf.format(date));

        sdf = new SimpleDateFormat("yyyy MM dd hh:mm:ss zzz");
        // 2023 07 16 10:06:49 CST
        System.out.println(sdf.format(date));

        sdf = new SimpleDateFormat("yyyy MM dd");
        // 2023 07 16
        System.out.println(sdf.format(date));
    }
}

jdk8 引入的表示日期和时间的新类中,LocalDateLocalTimeLocalDateTime 类位于类层次结构的顶层。三者遵循 ISO 8601 规定的公历标准。它们没有定义 public 构造器,提供了工厂方法 now() 返回当前系统的日期和时间。

public class DateTimeDemo {
    public static void main(String[] args) {
        LocalDate curDate = LocalDate.now();
        // 2023-07-16
        System.out.println(curDate);
        LocalTime curTime = LocalTime.now();
        // 22:22:52.273
        System.out.println(curTime);
        LocalDateTime cur = LocalDateTime.now();
        // 2023-07-16T22:22:52.273
        System.out.println(cur);
    }
}

LocalDateTime 类的 toLocalDate() 方法和 toLocalTime() 方法分别返回该对象的日期部分和时间部分的引用。

三者的 format(DateTimeFormatter fmt) 方法用于自定义日期和时间格式。**DateTimeFormatter ** 类的对象使用工厂方法获取,有

static DateTimeFormatter ofLocalizedDate(FormatStyle date);
static DateTimeFormatter ofLocalizedTime(FormatStyle time);
static DateTimeFormatter ofLocalizedDateTime(FormatStyle fmt, FormatStyle date);

根据想要格式化的类型选择不同的方法。FormatStyle 枚举定义的常量表示不同格式,有

  • FULL
  • LONG
  • MEDIUM
  • SHORT

和前述类似。

public class DateTimeDemo2 {
    public static void main(String[] args) {
        LocalDate curDate = LocalDate.now();
        // 2023年7月16日
        System.out.println(curDate.format(DateTimeFormatter.ofLocalizedDate(
		  FormatStyle.LONG)));
        LocalTime curTime = LocalTime.now();
        // 22:41:15
        System.out.println(curTime.format(DateTimeFormatter.ofLocalizedTime(
		  FormatStyle.MEDIUM)));
        LocalDateTime cur = LocalDateTime.now();
        // 2023年7月16日 星期日 22:41:15
        System.out.println(cur.format(DateTimeFormatter.ofLocalizedDateTime(
		  FormatStyle.FULL, FormatStyle.MEDIUM)));
    }
}

如果想要自定义日期时间格式,使用 DateTimeFormatter 类的 ofPattern(String fmt) 方法,接收自定义日期和时间格式,返回 DateTimeFormatter 对象。如果在格式字符串中想要使用普通文本,用单引号将其包裹起来。

public class DateTimeDemo3 {
    public static void main(String[] args) {
        LocalDate curDate = LocalDate.now();
        // 2023 年  07 月 16 日
        System.out.println(curDate.format(
		  DateTimeFormatter.ofPattern(
		    "yyyy '年'  MM '月' dd '日'",
			Locale.CHINA)));
    }
}

LocalDate、LocalTime 和 LocalDateTime 类提供的 parse(CharSequence dtstr) 方法解析字符串形式的日期时间默认格式,不符合则抛出异常。parse(CharSequence str, DateTimeFormatter fmt) 根据 fmt 的格式解析字符串。

public class DateTimeDemo4 {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.parse(
		  "2020 06 01 12:30:29",
		  DateTimeFormatter.ofPattern("yyyy MM dd HH:mm:ss"));
        System.out.println(dateTime
		  .format(DateTimeFormatter.ofPattern(
		    "yyyy'年' MM'月' dd'日' hh'时 'mm'分 'ss'秒'",
			Locale.CHINA)));
    }
}

参考

[1] Herbert Schildt, Java The Complete Reference 11th, 2019.

标签:24,JTCR,end,DateFormat,df,System,println,public,out
From: https://www.cnblogs.com/xdreamc/p/18155490

相关文章

  • JTCR-网络-21
    InetAddressInetAddress类用于封装IP地址或者域名,支持IPv4和IPv6。创建InetAddress对象需要使用工厂方法,因为没有提供显式构造器。工厂方法如下staticInetAddressgetLocalhost();staticInetAddressgetByName(StringhostName);//一个域名对应多个IP地址时,返回......
  • JTCR-探究 NIO-20
    nio支持面向缓冲区、基于通道(channel-based)的I/O操作方法。JDK9开始,包java.nio及其子包位于java.base模块。nio子系统不是为了取代面向流的I/O类。NIO基础nio系统构建在缓冲区(buffers)和通道之上。缓冲区用于存放数据,通道表示一个已打开的与I/O设备的连接。通过......
  • An Analysis of Sequential Recommendation Datasets
    目录概统计角度论证实验论证代码WoolridgeD.,WilnerS.andGlickM.Ananalysisofsequentialrecommendationdatasets.PERSPECTIVES,2021.概本文讨论了MovieLens系列数据集是否适用于序列推荐.统计角度论证作者为了论证MovieLens不适合作为序列推荐数据集,......
  • PeLK:101 x 101 的超大卷积网络,同参数量下反超 ViT | CVPR 2024
    最近,有一些大型内核卷积网络的研究,但考虑到卷积的平方复杂度,扩大内核会带来大量的参数,继而引发严重的优化问题。受人类视觉的启发,论文提出了外围卷积,通过参数共享将卷积的复杂性从\(O(K^{2})\)降低到\(O(\mathrm{log}K)\),有效减少90%以上的参数数量并设法将内核尺寸扩大到......
  • NFLS 240422 比赛总结
    PieOrDolphinTopcoderSRM617-Div1-Lv2题意有\(n\(\leq50)\)个人,给他们发礼物,共有\(m\(\leq1000)\)天,每天要给两个人发礼物,其中一个人获得一号礼物,另一个获得二号礼物,定义一个方案的总和为每个人获得的一号二号礼物数之差的和。现在每一天要发礼物的两个人已经确定,但是你......
  • 2024/4/23中考一模vp游记
    你说得对,但是这次和月考不一样,这次考试当天我才知道要考试。day1晚上四节自习课考两场试。典中典之第一场语文。考试前打桌足,守门员踢进自家球门\(6\)个。并且连输两把。/ll\(5:50\)开始考试。但是我\(5:49\)进考场,然后找不到座位又回教室看了座位表。幸好一车人迟到所......
  • 【2024-04-23】夫妻默契
    20:00一本书,当未读之前,你会感到书是那么.....但是当我们对书的内容真正有了透彻的了解,抓住了全书的要点,掌握了全书的精神实质以后,就会感到书本变薄了。                                       ......
  • 界面控件DevExpress VCL v24.1预览 - 支持RAD Studio 12.1、图表新功能
    DevExpressVCL Controls是Devexpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程序。我们距离下一个主要更新(v24.1)还有几......
  • 第二届先进传感与智能系统国际会议(ICASIS 2024)
    第二届先进传感与智能系统国际会议(ICASIS2024)日期:2024年6月22-23日地点:中国昆明会议亮点:前沿议题:聚焦先进传感技术、智能传感、物联网、大数据分析与人工智能等核心话题。全球交流:与全球顶级学者、行业领袖面对面,共同探讨行业趋势与未来挑战。有中国工程院外籍院士Prof.......
  • 实时分析平台设计方案:924-6U CPCI振动数据DSP实时分析平台
      一、产品概述   基于CPCI结构完成40路AD输入,30路DA输出的信号处理平台,处理平台采用双DSP+FPGA的结构,DSP采用TI公司新一代DSPTMS320C6678,FPGA采用XilinxV55VLX110T-1FF1136芯片,设计尽量采用工业级芯片。该方案描述了技术要求,硬件设计、软件设计方案......