『壹』 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程序,將一字元串其中的大小寫字母的字元分別輸出
循環字元串用charAt方法來獲取字元,將字元轉為int,只要判斷轉換後的數值就可以判斷大小寫字母,大寫字母的范圍是65-90,小寫字母的范圍是97-122。
public class Main {
public static void main(String[] args) {
String s = "aaBvdEFdsd";
StringBuffer ss = convertString(s);
System.out.println("大小寫轉換後是:" + convertString(s));
System.out.println("倒序輸出後是:" + ss.reverse());
}
public static StringBuffer convertString(String str) {
String upStr = str.toUpperCase();
String lowStr = str.toLowerCase();
StringBuffer buf = new StringBuffer(str.length());
for (int i = 0, k = str.length(); i < k; i++) {
{
if (str.charAt(i) == upStr.charAt(i)) {
buf.append(lowStr.charAt(i));
} else {
buf.append(upStr.charAt(i));
}
return buf;
(2)java動態字元串擴展閱讀:
字元串在存儲上類似字元數組,它每一位單個元素都是能提取的,字元串的零位是它的長度,如s[0]=10,這提供給我們很多方便,例如高精度運算時每一位都能轉化為數字存入數組。
通常以串的整體作為操作對象,如:在串中查找某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字元串相等的充要條件是:長度相等,並且各個對應位置上的字元都相等。設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的存儲方式是順序存儲方式和鏈接存儲方式。
『叄』 java 如何根據字元串 動態執行方法(無參和有參)
importjava.lang.reflect.Method;
publicclassTest{
publicstaticvoidmain(String[]args){
Stringa="testa";
Stringb="testb";
call(a);
call(b,"hello");
}
privatestaticvoidcall(StringmethodName){
try{
Methodm=Test.class.getDeclaredMethod(methodName);
m.invoke(Test.class);
}catch(Exceptione){
e.printStackTrace();
}
}
privatestaticvoidcall(StringmethodName,Stringparam){
try{
Methodm=Test.class.getDeclaredMethod(methodName,String.class);
m.invoke(Test.class,param);
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidtesta(){
System.out.println("無參數");
}
publicstaticvoidtestb(Stringc){
System.out.println(c);
}
}
試試這個可以不。
如果解決了您的問題請採納!
如果未解決請繼續追問
『肆』 如何在Java控制台輸出動態效果(字元的跳動)
字元跳動好像不的行額...我只知道什麼顏色啊!字體啊什麼的或者加動態加音樂什麼的!對了你可以這樣嘛!判斷文本的長度!如果長度在某個段內就調用Substring()截取字元串來設定大小顏色什麼的!再創建幾個Icon ir= new ImageIcon(); 插入些制定找好的圖片 你看怎麼樣~!?加音樂如下! 可以這樣! 也是取值到某段就放MUSIC 通過Java提供的AudioClip類就可以播放了:
mid = java.applet.Applet.newAudioClip(this.getClass().getResource(midUrl[0]));mid.loop();
//循環mid.play();
//播放mid.stop();
//停止檢舉midUrl[0]是文件的路徑 不知道兄弟幫到你沒!哎!我也就這點功力了。嘿嘿
『伍』 java 中 String 數組怎麼動態賦值
首先明確一下數組的初始化:
//靜態初始化
inta[]={1,2,3};
//動態初始化
inta[];a=newint[3];a[0]=1;a[1]=2;a[2]=3;
//默認初始化
inta[]=newint[5];
JAVA是強類型,數組類型一旦聲明,就不能更改了;
如果數組長度確定,我想所謂的「動態賦值」用循環應該可以搞定;
如果數組的長度是不確定的,我認為你這個提問才有點價值,因為這需要根據具體情況來改變數組的長度,告訴你java是怎麼乾的,用的System.array,jdk里好多操作數組的源碼都是用的這個,比如ArrayList的實現
閑著沒事寫了個小例子玩玩:
importjava.util.Random;
importjava.util.Scanner;
/**
*
*@authorLYTG
*@since2015-12-29上午12:21:09
*/
publicclassDemoTest{
/**
*@authorLYTG
*@paramargs
*/
publicstaticvoidmain(String[]args){
test2();
}
/**
*@authorLYTG
*@paramarray
*/
publicstaticvoidout(String[]array){
if(array==null){
System.out.println("null");
return;
}
if(array.length<1){
System.out.println("{}");
return;
}
StringBuffersb=newStringBuffer();
sb.append("{"");
sb.append(array[0]);
sb.append(""");
for(inti=1;i<array.length;i++){
sb.append(","");
sb.append(array[i]);
sb.append(""");
}
sb.append("}");
System.out.println(sb.toString());
}
/**
*聲明一個長度為5的String類型數組,並為每個數組元素賦值一個隨機整數
*@authorLYTG
*/
publicstaticvoidtest1(){
String[]array=newString[5];
for(inti=0;i<array.length;i++){
array[i]=String.valueOf(newRandom().nextInt());
}
out(array);
}
/**
*在控制台輸入字元,把每次輸入的字元保存到一個數組中,
*如果輸入的字元串中包含空格,則切割後再分別保存到此數組中,
*在每次輸入完成後輸出整個數組,直到手動終止程序
*@authorLYTG
*/
privatestaticString[]array=newString[0];
publicstaticvoidtest2(){
Scannersc=newScanner(System.in);
System.out.println("請輸入一串字元(輸入完請敲回車):");
Stringinput=sc.nextLine();
if(input.contains("")){
String[]a=input.split("");
intarrayLength=array.length;
intaLength=a.length;
String[]newArray=newString[arrayLength+aLength];
System.array(array,0,newArray,0,arrayLength);
System.array(a,0,newArray,arrayLength,aLength);
array=newArray;
}else{
intarrayLength=array.length;
String[]newArray=newString[arrayLength+1];
System.array(array,0,newArray,0,arrayLength);
newArray[arrayLength]=input;
array=newArray;
}
out(array);
test2();
}
}
『陸』 java用字元串動態創建對象
/**
* 根據傳入的類名和值,動態構造該類的實例
*
* @param _sClassName
* 要構造的類名 如:java.lang.String
* @param _sRealValue
* 要創建的對象的值,比如「wuguowei」
* @return 返回String對象,即值為「wuguowei」的字元串
* @throws Exception
*/
private Object getAttributeObject(String _sClassName, String _sRealValue)
throws Exception {
//1.載入類對象
Class attrObjClass = Class.forName(_sClassName);
//2.如果是Long類
if (attrObjClass.isInstance(new Long(0))) {
return new Long(_sRealValue);
}
//3.如果是Integer類
if (attrObjClass.isInstance(new Integer(0))) {
return new Integer(_sRealValue);
}
//4.其他類型……
//5.返回當前類的實例對象
return attrObjClass;
}
『柒』 java怎麼動態的往一個字元串數組里加入字元串元素,
希望把標題能把問題說明白,什麼叫動態往一個字元串數據組里加入元素?我可以理解為你new一個數組之後,給這個數組賦值么?比如:
String[]arr=newString[20];
for(inti=0;i<arr.length;i++){
arr[i]="i="+i;//這里是賦值,是這個意思么?
}
『捌』 java 中 String 數組怎麼動態賦值
String[] str = new String[5]; //創建一個長度為5的String(字元串)型的一維數組
str[0] = a; //賦值
str[1] = b;
str[2] = c;
str[3] = d;
str[4] = e;
//也可以創建並賦值
String[] str = {a,b,c,d,e};//二維數組
String[][] str = new String[2][2]; //創建一個2行2列的二維數組
str[0][0] = a0; //賦值
str[0][1] = a1;
str[1][0] = b0;
str[1][1] = b1;
//也可以創建並賦值
類型名[]/[][] 變數名 = new 類型名[]/[][];
『玖』 Java 如何向一個定義好的String中動態添加字元串
你這個是往數組中添加而不是字元串中添加。java中的數組沒法添加元素,只能再創建一個更長的數組,復制進去。List類將這些功能封裝了,相當於動態數組,可以方便的添加和刪除元素。
『拾』 Java怎麼獲取一個動態的字元串中指定的值
用substring.具體用法:
字元串截取,substring(int
beginindex)
返回一個新的字元串,它是此字元串的一個子字元串。
substring(int
beginindex,
int
endindex)
返回一個新字元串,它是此字元串的一個子字元串。
beginindex
-
起始索引(包括)。從0開始
endindex
-
結束索引(不包括)。
"12345".substring(3)
returns
"45"
"12345".substring(2,
3)
returns
"23"