1. String API

字符串绝对是 Java 中最常用的一个类了,String 类的方法使用率也都非常的高,在 Java 11 中又为 String 类带来了一系列的好用操作。

1、isBlank() 判空。

  1. // 判空,blank里我放入了全角空格,半角空格,
  2. TAB String blank = " ";
  3. System.out.println(blank.isBlank()); // 输出 // true

2、lines() 分割获取字符串流。

  1. // lines 返回一个 Stream
  2. String line = "a\nb\nc";
  3. Stream<String> lines = line.lines();
  4. // 使用 lambda 遍历 lines.forEach(System.out::println); // 输出 // a // b // c

3、repeat() 复制字符串

  1. // 复制字符串
  2. String repeat = "Hello Java11,";
  3. String repeat3 = repeat.repeat(3); System.out.println(repeat3);
  4. // 输出 Hello Java11,Hello Java11,Hello Java11,

4、strip() 去除前后空白字符

  1. // 去除前后空白
  2. String strip = "   https://www.wdbyte.com  ";
  3. System.out.println("==" + strip.trim() + "==");
  4. // 去除前后空白字符,如全角空格,TAB
  5. System.out.println("==" + strip.strip() + "==");
  6. // 去前面空白字符,如全角空格,TAB
  7. System.out.println("==" + strip.stripLeading() + "==");
  8. // 去后面空白字符,如全角空格,TAB
  9. System.out.println("==" + strip.stripTrailing() + "==");
  10. // 输出
  11. // ==  https://www.wdbyte.com  ==
  12. // ==https://www.wdbyte.com==
  13. // ==https://www.wdbyte.com  ==
  14. // ==   https://www.wdbyte.com==

这里注意,trim 只能去除半角空格,而 strip 是去除各种空白符。

2. File API

读写文件变得更加方便。

  1. // 创建临时文件
  2. Path path = Files.writeString(Files.createTempFile(FileSystems.getDefault().getPath("d:/temp"),"test", ".txt"), "我很在学习Java编程语言!");
  3. System.out.println(path);
  4. // 读取文件
  5. // String ss = Files.readString(Path.of("file.json"));
  6. String s = Files.readString(path);
  7. System.out.println(s);

3. JEP 321 - HTTP Client

在 Java 11 中 Http Client API 得到了标准化的支持。且支持 HTTP/1.1 和 HTTP/2 ,也支持 websockets。
你可以像这样发起一个请求。

  1. HttpClient client = HttpClient.newHttpClient();
  2. HttpRequest request = HttpRequest.newBuilder()
  3. .uri(URI.create("https://www.hao123.com"))
  4. .build();
  5. // 异步
  6. client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
  7. .thenApply(HttpResponse::body)
  8. .thenAccept(System.out::println)
  9. .join();
  10. // 同步
  11. HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
  12. System.out.println(response.body());

更多的如同步异步请求,并发访问,设置代理等方式,可以参考 OpenJDK 官方文档。
http://openjdk.java.net/groups/net/httpclient/recipes-incubating.html
你现在还需要各种 HTTP Client 依赖包吗?

4. JEP 323 - Lambda 局部变量推断

在 Java 10 中引入了 var 语法,可以自动推断变量类型。在 Java 11 中这个语法糖可以在 Lambda 表达式中使用了。

  1. var hashMap = new HashMap<String, Object>();
  2. hashMap.put("name", "小王同学");
  3. hashMap.put("desc", "小王同学是个热爱学习的孩子!");
  4. hashMap.forEach((var k, var v) -> {
  5. System.out.println(k + ": " + v);
  6. });

这里需要注意的是,(var k,var v) 中,k 和 v 的类型要么都用 var ,要么都不写,要么都写正确的变量类型。而不能 var 和其他变量类型混用。
1646710322(1).png

5. JEP 330 - 单命令运行 Java

自从学习 Java 的第一天,我们就知道运行一个 Java 文件,要先用 javac 命令编译,再用 java 命令运行,而现在只要一个 java 命令就可以运行了。

java HelloWorld.java