‘壹’ 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"