新聞中心
java中怎么執(zhí)行字符串中的代碼
轉(zhuǎn):
創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!
在javascript中eval()可以實(shí)現(xiàn)字符串轉(zhuǎn)代碼,java中需要使用動態(tài)編譯。
把獲得的字符串寫入一個(gè)臨時(shí)文件中,然后編譯它,在調(diào)用其中的函數(shù)。
我們把要轉(zhuǎn)換的字符串構(gòu)造一個(gè)完整的類:如果方法是有返回值的.則:
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();
//動態(tài)編譯
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;
}
//調(diào)用temp的rt方法返回結(jié)果:
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] });
//如果方法沒有返回就直接調(diào)用
}
我們可以先寫好多個(gè)重載的eval,有返回值和沒有返回值的.以及可以傳遞參數(shù)的.
這樣我們就可以用字符串轉(zhuǎn)換為java的語句來執(zhí)行.
在java里簡單的定義一個(gè)字符型變量,以整型的形式再做輸出,怎么編寫這個(gè)代碼啊
使用Integer.parseInt(str)可以將字符串轉(zhuǎn)為整型,前提是str必須是一串?dāng)?shù)字,詳情看下圖。
在java中如何輸入一個(gè)char型字符。
可以創(chuàng)建Scanner類來從鍵盤輸入一個(gè)字符,用String類型來接收,再使用String的charAt功能,具體步驟如下:
1、先創(chuàng)建一個(gè)Scanner對象,如:Scanner sc = new?Scanner(System.in);
2、然后再調(diào)用Scanner對象sc的next()方法獲取控制臺輸入,定義一個(gè)String類型的變量s來接收控制臺輸入的字符,如:String s = sc.next();
3、調(diào)取變量s的charAt(0)方法獲取第一個(gè)字符,如:char c = s.charAt(0);
擴(kuò)展資料
字符型值有如下三種表示形式
1、直接通過單個(gè)字符來指定字符型值,例如‘A’、‘9’和‘0’等。
2、通過轉(zhuǎn)義字符表示特殊字符型值,例如‘\n’、‘\t’等。
3、直接使用Unicode值來表示字符型值,格式是‘\uXXXX’,其中XXXX代表一個(gè)十六進(jìn)制的整數(shù)
字符型值也可以采用十六進(jìn)制編碼方式來表示,范圍是‘\u0000’~‘\uFFFF’,一共可以表示65536個(gè)字符,其中前256個(gè)(‘\u0000’~‘\u00FF’)字符和ASCII碼中的字符完全重合。
由于計(jì)算機(jī)底層保存字符時(shí),實(shí)際是保存該字符對應(yīng)的編號,因此char類型的值也可直接作為整型值來使用,它相當(dāng)于一個(gè)16位的無符號整數(shù),表數(shù)范圍是0~65535。
如果把0~65535范圍內(nèi)的一個(gè)int整數(shù)賦給char類型變量,系統(tǒng)會自動把這個(gè)int整數(shù)當(dāng)成char類型來處理。
參考資料:百度百科-char數(shù)據(jù)類型
java字符串怎么轉(zhuǎn)換為代碼
方法是有的,但不全實(shí)際.
首先,你要理解,JAVA代碼的運(yùn)行是要被編譯成字節(jié)碼codebyte后才能被執(zhí)行的,以你問題中的意思,那個(gè)字符串應(yīng)該是在怎么代碼被編譯后項(xiàng)目在運(yùn)行時(shí),再傳入的參數(shù),這時(shí),要想把傳入?yún)?shù)的字符串當(dāng)成JAVA代碼來運(yùn)行,只有一種辦法,就是把傳進(jìn)來的字符串轉(zhuǎn)換成字節(jié)碼,并且,要虛擬加一個(gè)方法體出來.這也不是不可行,可用的技術(shù)有asm.cglib等字節(jié)碼技術(shù).但你想,對于你的問題.這樣有實(shí)際的意義嗎
你還不如,把system.out.print重定義成新的外調(diào)方法調(diào)動來的清晰
用JAVA編程設(shè)定5個(gè)字符串只打印哪些以字母b開頭的串
1、新建java類,TestStr,
2、編寫java代碼,先定義5個(gè)java字符串,
String[] s = new String[5];
s[0] = "book";
s[1] = "Biz";
s[2] = "alen";
s[3] = "jack";
s[4] = "blue";
3、編寫以字母b開頭的表達(dá)式,并進(jìn)行循環(huán)匹配打印,
for (int i = 0; i 5; i++) {
if (s[i].startsWith("b")) {
System.out.println(s[i]);
}
}
4、執(zhí)行java代碼,在console窗口觀察輸出信息,b開頭的,會輸出book、blue兩個(gè)字符串,
當(dāng)前題目:java字符型代碼 java字符串編碼格式
當(dāng)前路徑:http://www.ef60e0e.cn/article/dodeeic.html