### Clob 轉換成 String
```java
import java.sql.Clob;
import java.sql.SQLException;
```
```java
private String toString(Clob clob) throws SQLException {
return null == clob ? "" : clob.getSubString(1, (int)clob.length());
}
```
#### Supplier 無參數有回應
```java
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
Supplier<Object> randomNumber = () -> (int)(Math.random() * 10);
System.out.println(randomNumber.get()); // 9
}
}
```
#### Predicate 有參數 Boolean 回應
```java
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> isMail = (a) -> a.matches("^[_a-z0-9-]+([.][_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$");
System.out.println(isMail.test("abc123@abc.com")); // true
}
}
```
#### Function 有參數有回應
```java
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Integer> toInt = (a) -> Integer.valueOf(a);
int a = toInt.apply("198");
System.out.println(a); // 198
}
}
```
#### Consumer 有參數無回應
```java
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Consumer<String> printer = (a) -> System.out.println(a);
printer.accept("result: " + 198); // result: 198
}
}
```
### [get Thread ID](https://stackoverflow.com/questions/61207226/logging-thread-id-instead-of-thread-name-using-logback)
```java
Thread.currentThread().getId()
```
### Interface 預設函式
自 Java 8 開始,Java 中的 interface 已經可以定義預設實現的方法。這些方法可以直接在 interface 中定義,不需要在實現類中重寫。以下是一個簡單的例子:
```java
public interface MyInterface {
default void myMethod() {
System.out.println("Default implementation of myMethod in MyInterface");
}
}
```
如果需要,在實現類中也可以重寫預設實現的方法,例如:
```java
public class MyOtherClass implements MyInterface {
@Override
public void myMethod() {
System.out.println("Custom implementation of myMethod in MyOtherClass");
}
}
```
### 棄用 @Deprecated
```java
public class DeprecatedExample {
@Deprecated
public static final String DEPRECATED_FIELD = "This field is deprecated";
public static final String NEW_FIELD = "This field is not deprecated";
@Deprecated
public void deprecatedMethod() {
// 這個方法已經棄用
}
public void newMethod() {
// 新方法的實現
}
}
```
```java
public interface DeprecatedInterface {
@Deprecated
void deprecatedMethod();
void newMethod();
}
```
### Runtime & Process
當你在 Java 中使用 `Runtime` 類及 `Process` 時,可以執行外部命令並與其進行交互。以下是一個簡單的例子,演示如何使用 `Runtime` 類及 `Process` 來執行 Linux 中的 `ls` 命令並輸出其結果:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ExecuteCommand {
public static void main(String[] args) {
try {
// 使用 Runtime 創建新的進程
Process process = Runtime.getRuntime().exec("ls");
// 獲取進程的輸出流
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
// 讀取輸出並輸出到控制台
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 等待命令執行完成
int exitCode = process.waitFor();
System.out.println("Command executed with exit code: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
```
在這個例子中,我們使用 `Runtime.getRuntime().exec("ls")` 創建一個新的進程來執行 `ls` 命令。然後,我們使用進程的輸出流來獲取命令的輸出,並將其輸出到控制台。
請注意,這只是一個簡單的例子,你可以根據你的需求修改命令和處理輸出的方式。另外,請注意,`exec()` 方法也可以接受一個字串數組,例如 `exec(new String[]{"ls", "-l"})`,這樣可以更靈活地指定命令及其參數。
### IOUtils.readLines
以下是一個使用 Apache Commons IO 库的 IOUtils readLines 方法讀取網站上的文本文件的示例:
```java
import org.apache.commons.io.IOUtils;
import java.net.URL;
import java.io.IOException;
import java.util.List;
public class ReadWebsiteTxt {
public static void main(String[] args) {
String url = "http://example.com/example.txt"; // 替換為實際網站上的 txt 文件 URL
try {
// 使用 URL 類來打開網站上的連接
URL website = new URL(url);
// 使用 IOUtils readLines 方法讀取文本文件的內容
List<String> lines = IOUtils.readLines(website.openStream(), "UTF-8");
// 輸出讀取到的每一行文本內容
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
請確保將 `url` 變量替換為實際的網站上的 txt 文件的 URL。這段代碼將讀取該網站上的 txt 文件的內容並將其打印到控制台。
### do-while
下面是一個使用do-while迴圈的Java範例:
```java
public class DoWhileExample {
public static void main(String[] args) {
int i = 1;
// 使用 do-while 迴圈列印數字 1 至 10
do {
System.out.println(i);
i++;
} while (i <= 10);
}
}
```
這個程式將會列印出數字1到10,因為do-while迴圈的特性是先執行一次迴圈內的程式塊,然後再檢查迴圈的條件。即使迴圈的條件為false,也至少會執行一次。在這個例子中,我們初始化變數i為1,然後使用do-while迴圈顯示i的值,每次迴圈結束後使i增加1,直到i大於10為止。
### java -Xms256m -Xmx1024m
-Xms256m 與 -Xmx1024m 分別是設定 Java 程式的初始記憶體和最大記憶體大小的選項。
-Xms 表示設定程式啟動時初始分配的記憶體大小,這樣程式啟動後就會立即分配指定大小的記憶體給程式使用。
-Xmx 表示設定程式運行時可以分配的最大記憶體大小,當程式執行期間需要更多的記憶體時,系統會分配最多指定大小的記憶體給程式使用。
總結來說,-Xms 設定程式啟動時的初始記憶體大小,-Xmx 設定程式運行時的最大記憶體大小。
### 兩個集合取交集
在 Java 中,可以使用 Set 的 retainAll() 方法來取兩個 Set 的交集。這個方法會修改呼叫者的 Set,使其只包含兩個 Set 的交集元素。
例如:
```java
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
Set<Integer> set2 = new HashSet<>();
set2.add(2);
set2.add(3);
set2.add(4);
set1.retainAll(set2);
System.out.println(set1); // 將只會包含 2 和 3
```
這樣,set1 中的元素將只包含兩個 Set 的交集元素,即 2 和 3。
### BitSet
BitSet是Java中用來表示位元集合(或稱位元向量)的類別。它可以有效地壓縮大量的布林值,並提供了方便的位元操作方法。
BitSet類別提供了一系列方法來設置、清除、翻轉和檢查位元的值。這些方法包括set()、clear()、flip()和get()等。此外,BitSet還提供了一些方便的方法來進行位元集合之間的操作,例如and()、or()、xor()等。
在使用BitSet時,我們可以根據自己的需求來代表一個位元集合,並進行相應的位元操作。BitSet的方法和操作都是高效、方便且易於理解的,可以幫助我們處理與位元相關的問題。
總的來說,BitSet是一個在Java中用來表示位元集合的強大工具,可以幫助我們簡化處理位元操作的任務。
```java
import java.util.BitSet;
public class Main {
public static void main(String[] args) {
BitSet bitSet = new BitSet(8); // 建立一個有8個元素的BitSet
// 設置第1、3、5、7個元素為true
bitSet.set(1);
bitSet.set(3);
bitSet.set(5);
bitSet.set(7);
// 輸出bitSet的內容
System.out.println("BitSet: " + bitSet); // BitSet: {1, 3, 5, 7}
// 清除第3、5個元素
bitSet.clear(3);
bitSet.clear(5);
// 輸出修改後的bitSet內容
System.out.println("Modified BitSet: " + bitSet); // Modified BitSet: {1, 7}
// 檢查第5個元素是否為true
if (bitSet.get(5)) {
System.out.println("第5個元素為true");
} else {
System.out.println("第5個元素為false"); // 第5個元素為false
}
// 設置所有元素為false
bitSet.clear();
// 輸出清空後的bitSet內容
System.out.println("Cleared BitSet: " + bitSet); // Cleared BitSet: {}
BitSet bitSet1 = new BitSet();
BitSet bitSet2 = new BitSet();
// 設定bitset1中的位元
bitSet1.set(0);
bitSet1.set(2);
bitSet1.set(4);
bitSet1.set(6);
// 設定bitset2中的位元
bitSet2.set(1);
bitSet2.set(3);
bitSet2.set(5);
bitSet2.set(6);
// 顯示bitset1中的值
System.out.println("BitSet1: " + bitSet1); // BitSet1: {0, 2, 4, 6}
// 顯示bitset2中的值
System.out.println("BitSet2: " + bitSet2); // BitSet2: {1, 3, 5, 6}
// 取得bitset1和bitset2的聯集
bitSet1.or(bitSet2);
System.out.println("BitSet1 OR BitSet2: " + bitSet1); // BitSet1 OR BitSet2: {0, 1, 2, 3, 4, 5, 6}
// 取得bitset1和bitset2的交集
BitSet intersection = (BitSet) bitSet1.clone();
intersection.and(bitSet2);
System.out.println("BitSet1 AND BitSet2: " + intersection); // BitSet1 AND BitSet2: {1, 3, 5, 6}
}
}
```
### TreeMap
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(3, "Apple");
treeMap.put(1, "Banana");
treeMap.put(2, "Orange");
System.out.println("TreeMap:"); // TreeMap:
for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
// Key: 1, Value: Banana
// Key: 2, Value: Orange
// Key: 3, Value: Apple
System.out.println("\nFirst Key: " + treeMap.firstKey()); // First Key: 1
System.out.println("Last Key: " + treeMap.lastKey()); // Last Key: 3
System.out.println("\nRemoving key 2"); // Removing key 2
treeMap.remove(2);
for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
// Key: 1, Value: Banana
// Key: 3, Value: Apple
}
}
```
### StringEscapeUtils
Apache StringEscapeUtils 是一個用於處理字串的工具類,可以對字串進行 HTML、Java、JavaScript、XML等不同格式的轉義操作。以下是一個使用範例:
```java
import org.apache.commons.lang3.StringEscapeUtils;
public class StringEscapeUtilsExample {
public static void main(String[] args) {
// HTML 轉義
String html = "<script>alert('XSS attack');</script>";
String escapedHtml = StringEscapeUtils.escapeHtml4(html);
System.out.println("Escaped HTML: " + escapedHtml);
// Java 字符串轉義
String java = "This is a text with \"quotes\"";
String escapedJava = StringEscapeUtils.escapeJava(java);
System.out.println("Escaped Java: " + escapedJava);
// JavaScript 字符串轉義
String javascript = "This is a text with 'quotes'";
String escapedJavaScript = StringEscapeUtils.escapeEcmaScript(javascript);
System.out.println("Escaped JavaScript: " + escapedJavaScript);
// XML 轉義
String xml = "<root>value</root>";
String escapedXml = StringEscapeUtils.escapeXml10(xml);
System.out.println("Escaped XML: " + escapedXml);
}
}
```
以上範例展示了如何使用 Apache StringEscapeUtils 對字串進行 HTML、Java、JavaScript、XML格式的轉義操作。可以根據需要選擇不同的方法來轉義字串,以確保字串在不同環境下的安全使用。