java編譯字元串
應該是這個意思,編譯完成之後:
String s4 = "瘋狂Java";
String s5 = s2 + s3;
Ⅱ java文件里字元串裡面的內容 怎麼在dos命令行不能編譯呢
這個明顯是編碼的問題。
編碼GBK的不可映射字元,java文件第二行的注釋都沒跑過去。
解決辦法:
Notepad++ :新建文件,然後菜單中選擇格式-->以UTF-8 無BOM格式編碼,然後把代碼重新Copy進去。
重新運行即可。
Ⅲ java過去字元串長度會不會多一位
長度不會多一位。
總結字元串有長度限制,在編譯期,要求字元串常量池中的常量不能超過65535,並且在javac執行過程中控制。使用如上形式定義一個字元串的時候,當我們執行javac編譯時,是會拋出異常的。
如果超出這個數量,在編譯的時候編譯器會報錯。
Ⅳ java中怎麼執行字元串中的代碼
在javascript中eval()可以實現字元串轉代碼,java中需要使用動態編譯。
把獲得的字元串寫入一個臨時文件中,然後編譯它,在調用其中的函數。
我們把要轉換的字元串構造一個完整的類:如果方法是有返回值的.則:
public object eval(string str){
//生成java文件
string s = "class temp{";
s += "object rt(){"
s += "myclass mc = new myclass();"
s += " return mc."+str+"();";
s += "}"
s +="}";
file f = new file("temp.java");
printwriter pw = new printwriter(new filewriter(f));
pw.println(s);
pw.close();
//動態編譯
com.sun.tools.javac.main javac = new com.sun.tools.javac.main();
string[] cpargs = new string[] {"-d", "所在目錄","temp.java"};
int status = javac.compile(cpargs);
if(status!=0){
system.out.println("沒有成功編譯源文件!");
return null;
}
//調用temp的rt方法返回結果:
myclassloader mc = new myclassloader();
class clasz = mc.loadclass("test.class",true);
method rt = clasz.getmethod("rt", new class[]{ string[].class });
return rt.invoke(null, new object[] { new string[0] });
//如果方法沒有返回就直接調用
}
我們可以先寫好多個重載的eval,有返回值和沒有返回值的.以及可以傳遞參數的.
這樣我們就可以用字元串轉換為java的語句來執行.
Ⅳ JAVA字元串編碼問題!
這種編碼問題真是很tricky的問題。說它tricky是因為這至少涉及到以下4種編碼選取的排列組合(有時甚至更多),更有時乃至會發生錯進錯出,負負得正,中間過程錯了但反而到不是亂碼的情況。
(1)源代碼的編碼
(2)編譯時告訴java編譯器的源代碼編碼
(3)運行時jvm參數file.encoding
(4)輸出終端對輸出位元組流的解碼所採用的碼組
在這簡單情況下(1)和(2)一致,(3)和(4)一致就不會因為編解碼映射錯誤(當然字元向終端字體映射的錯誤是另一回事,如字體缺失之類)。而(1)(2)和(3)(4)不必一致,這樣就使得不必強求開發編譯環境和運行應用環境的編碼必須一致。
源代碼的錄入與編譯若在在一個平台上時,大多數情況沒有問題(反而用聰明的Idea IDE設置錯誤時會亂套,越是簡陋的開發環境越不太會錯)。但是如果你在中文GBK編碼平台上的源代碼在別人的unicode編碼平台上編譯,就有問題了。所以和別人,特別是和不同母語的人合作編程時,建議要麼約定一律用unicode作為源文件編碼;要麼只用ASCII字元,反正其他編碼一般都和ASCII兼容的,對於非ASCII字元,用Java的/uxxxx表示機制,比如"中國"就表示為"\u4e2d\u56fd"。4e2d和56fd分別是中國二字的unicode十六進制編碼。
但我認為樓主在這里其實主要關心的是運行時的編碼一致問題,即(3)和(4)。所以言歸正傳,讓我們來檢查它們是否一致。
由於正如上述,iso8859-1編碼集其實是被其他所有公認的編碼集所兼容的,也就是說它是所有公認編碼集的公共子集。所以以iso8859-1為基礎可以外延到任何一個公認編碼集。事實上大多數情況也是這樣做的。比如java System property里設定了encoding為iso8859-1,事實上不僅僅是一個Latin字母的映射,在非Latin區域按JVM宿主操作系統的編碼擴展。即選iso8859-1其實是選擇了宿主操作系統的默認編碼。
假設樓主的操作系統編碼是GBK,那麼file.encoding=iso8859-1相當於選擇了file.encoding=GBK。那麼System.out.println(...)這個核心類方法會將china字元轉換為file.encoding指定的編碼(GBK)位元組由out流輸出給最終out所綁定的終端。比如console一般採用系統默認編碼也是GBK的話,那就和file.encoding一致,能正常解碼,不會亂碼。
至於System.out.write()直接寫位元組流。由於該位元組流是由china.getBytes()得到的,在不指定編碼的時候使用file.encoding指定的默認值的(即GBK),因此Str->Byte的編碼方法GBK和console採用的解碼方法GBK又是一致的,所以也不是亂碼。
但是這時候用toHexString列印出的兩個位元組串是不一樣的。先直接把china逐字強行轉換為int的情況,不涉及輸出編碼,總是unicode的。(JVM規范規定class里字串必須unicode編碼)只要上述(1) (2)匹配,java編譯器會自動從各種編碼的源文件正確轉成class文件里統一unicode編碼的字串。相反,作為一個題外話提一下,當(1)(2)不匹配時會在特定的一種配合(1)(2)的(3)(4)也不匹配的情況下會負負得正輸出正常,但這是絕對錯誤的做法,因為任何要求(1)(2)和(3)(4)有匹配關系的要求都是在應用中可能無法滿足的。java編譯器對這種情況也會報告warning,但不fail。
綜上,一旦file.encoding設成宿主操作系統默認而系統consle也採用操作系統默認編解碼的話,(3)(4)總是一致的,無論系統選擇的是GBK還是utf-8等等。
那麼如果file.encoding不選系統默認呢?比如utf-8。那就很可能出現亂碼了。但是,慢著,試驗的結果還是沒有亂碼。那是因為file.encoding是靜態的JVM系統參數,在程序里像樓主那樣設定是不起作用的(我不知道有沒有辦法發一個什麼通知讓這種程序改變生效的)。必須作為JVM參數直接傳給java程序讓它構造虛擬機的時候就得到這個參數,否則JVM會去拿宿主系統的默認值,就相當於又回到設file.encoding=iso8859-1了。
java -Dfile.encoding=utf-8 A
這下終於亂碼了,而且兩個都亂了。列印出的位元組串一個還是unicode,另一個從GBK變到utf-8了。
如果你發現試驗的現象和我上面說的正好相反,請注意檢查console的編碼設置,我們上面假設它也採用了宿主系統默認編碼,但有些console很高級的嘞,可以設置成不通編碼的(其實幾乎所有的都可以)。那麼分析的方法和上面一樣,結果可能正好相反。
Ⅵ java 如何定義字元串變數
一、使用 String 類定義:
在 Java 中每個雙引號定義的字元串都是一個 String 類的對象。因此,可以通過使用 String 類的構造方法來創建字元串,該類位於 java.lang 包中,作用域是 final。
String 類的構造方法有多種重載形式,每種形式都可以定義字元串。下面介紹最常用的幾種形式。
1、 String()
初始化一個新創建的 String 對象,表示一個空字元序列。
2、String(String original)
初始化一個新創建的 String 對象,使其表示一個與參數相同的字元序列。換句話說,新創建的字元串是該參數字元串的副本。
3、String(char[ ]value)
分配一個新的字元串,將參數中的字元數組元素全部變為字元串。該字元數組的內容已被復制,後續對字元數組的修改不會影響新創建的字元串。
4、String(char[] value,int offset,int count)
分配一個新的 String,它包含來自該字元數組參數一個子數組的字元。offset 參數是子數組第一個字元的索引,count 參數指定子數組的長度。該子數組的內容已被賦值,後續對字元數組的修改不會影響新創建的字元串。
Ⅶ java 字元串嵌套編譯不過
String ss= "{\"aa\":\"xixi\",\"pp\":\"1234\"}"; 用\轉義一下就好了
Ⅷ 在java中怎麼把一個字元串編譯為指定編碼格式(如:unicode)的輸出
很多種方法request.setCharacterEncoding("utf-8"); //設置輸入編碼格式
response.setContentType("text/html;charset=utf-8"); //設置輸出編碼格式
一般寫個Servlet的過濾器
(getByte("ISO-8859-1"),"utf-8");在配置文件裡面過濾.
Ⅸ java中怎麼將字元串編譯成可執行的有效語法
你說的什麼意思我沒看懂。字元串為:setName() ????待括弧的都是方法啊。你希望setName()可以對name屬性賦值。你說的是不是封裝。get和set方法??代碼發來給你看看。
Ⅹ Java編譯器中String testStr="雙引號\"單引號\'反斜杠\\下一行\n製表符\t回車\r 這個字元串佔多少字元
23個"\"表示的是轉義字元,它的作用是轉換後面字元是作用。比如"在代碼中表示字元串的開始與結束,轉義後就單單表示"這個字元。所以轉義字元並不佔字元串內的字元數量,或者你可以把"\n"、"\r"、"\\"這些看做成一個字元。