Java中的一些基础代码片段_2

=Start=

缘由:

在学习Java的过程中不断用文章进行整理总结(常用功能的Java实现),争取早日能较为熟练的使用Java进行开发。

正文:

参考解答:
1. Java中如何将 Long 型转换成 int/Integer 型

Java中Integer属于不可更改类型,而且Long和Integer没有任何继承关系,所以不能直接转换。否则会报错「java.lang.Long cannot be cast to java.lang.Integer」

注:java.lang.Number 是 Integer,Long 的父类。

2. Java中字符串的常用操作

当对字符串进行修改的操作较多的时候,需要使用 StringBuffer 和 StringBuilder 类。因为和常规的 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

3. 特殊一点的字符串切分

借助:
import com.google.common.base.Splitter;
实现 在切分时,自动去掉空值 的功能。

4. Java中日期字符串格式的校验

5. Java中打印 数组 的3种方法总结

6. Java中打印 map 的方法总结

&

除了这种指定Map类型的方式之外,还可以考虑借助一下泛型(在map元素不是特别多的情况下)来实现。

参考链接:
  • 如上

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3975.html

《Java中的一些基础代码片段_2》上有4条评论

  1. Java执行系统命令的方法和原理
    https://xz.aliyun.com/t/2342
    http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
    http://tool.oschina.net/uploads/apidocs/jdk-zh/java/lang/Process.html

    要构建JSP命令执行后门,首先需要了解Java语言执行系统命令的方法及其原理。通过查阅资料知道:目前Java语言执行系统命令主要通过下面两个类的相关方法实现:
    java.lang.Runtime
    java.lang.ProcessBuilder

    查阅 Java 文档 可以发现,上面两个类,都是对java.lang.Process抽象类的实现。

    Java语言中执行系统命令的方式,简单来说就是由JVM创建一个本机进程,加载对应的指令到进程的地址空间中,然后执行该指令。
    而java.lang.Runtime.getRuntime().exec()和 java.lang.ProcessBuilder.start()方法,其实就是创建一个进程的方法。

    总结一下,Java语言执行系统命令相关类和方法的调用关系表示如下图:
    java.lang.Runtime
    ---> getRuntime().exec()
    java.lang.ProcessBuilder
    ---> start()
    java.lang.ProcessImpl.start()

  2. rsyslog在打日志的时候,在日期那儿一般是「不会」补零,而是用「空格」替代;所以如果你的程序写的不够健壮,可能会在某个月的前几天出现异常,过了这段期间又自动恢复,没有遇到过这个问题的处理起来还真的是挺麻烦的。

    /**
    * 下面的几点问题在于:
    * 'Jul 2'
    * 'Jun 14'
    * 日志里面把本来以为的 '02' 用 ' 2' 来写,所以常规的 split() 切分时会多出来一个元素,从而导致匹配失败;
    * 用 Splitter 可以解决切分的问题,但是,切出来的结果是 List 的,而不是之前的 String[] 数组,有一定区别,但区别不大。
    */
    String record = "2018-07-02T11:36:42.146Z 172.16.9.15 Jul 2 19:36:40 hostname01 sshd[25882]: Accepted password for root from 172.16.9.49 port 40675 ssh2";
    String split_record[] = record.split(" ");
    System.out.println(split_record.length); // 17

    String record2 = "2018-07-02T11:36:42.146Z 172.16.9.15 Jul 2 19:36:40 hostname01 sshd[25882]: Accepted password for root from 172.16.9.49 port 40675 ssh2";
    Splitter splitter = Splitter.on(" ").trimResults();
    List split_record2 = splitter.omitEmptyStrings().splitToList(record2);
    System.out.println(split_record2.size()); // 16

    String record3 = "2018-06-14T07:47:45.460Z 192.168.16.5 Jun 14 15:47:41 hostname02 sshd[4754]: Accepted password for root from 111.33.10.152 port 26779 ssh2";
    List split_record3 = splitter.omitEmptyStrings().splitToList(record3);
    System.out.println(split_record3.size()); // 16

发表评论

电子邮件地址不会被公开。 必填项已用*标注