Java和Python的區別:
1.Python比Java簡單,學習成本低,開發效率高;
2.Java運行效率高於Python,Python效率低;
3.Java相關資料多,尤其是中文資料;
4.Java版本比較穩定,Python2和3不兼容導致大量類庫失效;
5.Java開發偏向於軟體工程,Python更適合小型開發;
6.Java偏向於商業開發,Python適合於數據分析;
7.Java是一種靜態類型語言,Python是一種動態類型語言;
8.Java中的所有變數需要先聲明才能使用,Python中的變數不需要聲明類型;
9.Java編譯以後才能運行,Python直接就可以運行;
10.實現同一功能時,JAVA要敲的鍵盤次數一般要比Python多很多。
B. 在java編程中「;」expected是什麼意思
在Java編程中,「; expected」通常表示編譯器期待在某個位置看到一個分號。
詳細解釋:
1. 語法錯誤提示:在Java編程中,分號是非常重要的語法符號,用於標識語句的結束。當編譯器在解析代碼時,如果發現某個語句缺少了分號,就會提示「; expected」,意味著編譯器期待在當前位置看到一個分號。
2. 常見錯誤場景:這種錯誤經常出現在語句的結尾處,例如在表達式、循環、條件語句等結束時忘記加分號。例如,聲明一個變數後應該緊接著加上分號。如果忘記了分號,編譯器就會報這個錯誤。
3. 代碼修正:解決這個錯誤的方法很簡單,只需要在缺少分號的地方加上分號即可。例如,將`int x = 10`修改為`int x = 10;`。此外,還需要檢查周圍的代碼,確保其他語句也都正確使用了分號。
4. 代碼規范:雖然在一些情況下,編譯器可能允許在沒有分號的地方結束語句,但良好的編程習慣是始終在語句的末尾使用分號。這樣可以避免潛在的混淆和錯誤,提高代碼的可讀性。
總之,「; expected」這個錯誤提示意味著編譯器在某個位置期待看到一個分號,開發者需要檢查代碼,確保每個語句的結尾都正確使用了分號。
C. 我想用split(";")來分隔我的Java代碼, 但是若是字元串中有`;`我該怎麼辦
你的問題在於轉義的雙引號字元串內的分號不應該拿來分割。未解決這個問題只能將轉義的部分單獨截取出來,不參與分割,等其他部分分割結束後,再將轉義的內容拼接進去即可。
為防止雙引號轉義符內部還有其他雙引號轉義符"的影響,對\"用#@#佔位符將之替換。
需要引入第三方工具類輔助進行佔位符替換:
import org.apache.commons.lang3.StringUtils;
依賴為:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
代碼為:
public class Main {
public static void main(String[] args) {
String a = "String a = ";";String b = "aaaa";";
String b = "String a = "\";";String b = "aaaa";";
System.out.println(codeSplit(a));
System.out.println(codeSplit(b));
}
private static List<String> codeSplit(String a){
//排除雙引號轉義符內部還有其他雙引號轉義符"的影響,用「#@#」佔位符將之替換
a = StringUtils.replace(a, "\"", "#@#");
List<String> result = new ArrayList<>();
boolean start = true;//檢查雙引號轉義符,為true時代表找到雙引號轉義符的左轉義符,為false時代表找到雙引號轉義符的右轉義符
while (a.indexOf(""") > 0) {
int index = a.indexOf(""");//index:雙引號左轉義符位置
//發現雙引號轉義符時,將當前字元串的(0 至 index + 1)字元截取出來作為tmp
String tmp = a.substring(0, index + 1);
a = a.substring(index + 1);//將截取剩下的部分重新賦值給原字元串
if (start) {
//發現雙引號轉義符的左轉義符,對tmp字元串按分號進行分割,將不為空的結果添加到結果集中
String[] stArr = tmp.split(";");
for (String s : stArr) {
if (s.length() > 0) {
result.add(s);
}
}
} else {
//發現雙引號轉義符的右轉義符,不進行分割,將tmp字元串拼接到結果集的最後一個字元串中
String end = result.get(result.size() - 1);
end += tmp;
result.remove(result.size() - 1);
result.add(end);
}
start = !start;//轉置雙引號轉義符標志,正常情況下雙引號轉義符必須成對出現,否則將得到預期外的結果
}
//跳出循環後對剩餘的a字元串再做一次分割
String[] stArr = a.split(";");
for (String s : stArr) {
if (s.length() > 0) {
result.add(s);
}
}
//將結果集內的「#@#」佔位符還原為"
return result.stream().map(s -> StringUtils.replace(s, "#@#", "\"")).collect(Collectors.toList());
}
}