Rhino的String和java的String互相转换问题

实验:
D:\>java -Xbootclasspath/a:. -jar js.jar
Rhino 1.7 release 2 2009 03 22
js> importPackage(java.lang)
js> importClass(Packages.Foo)
js> for each (var i in new Foo().getName().split("|")){ System.out.println(i);}

a
|
b
|
c
js> for each (var i in new Foo().getName().split("|")) System.out.println(i);

a
|
b
|
c
js> for each (var i in new Foo().getName().split("\\|")) System.out.println(i);
a
b
c
js> for each (var i in new Foo().name.split("\\|")) System.out.println(i);
a
b
c
js> for each (var i in new Foo().name.split("|")) System.out.println(i);

a
|
b
|
c
js> var f=new Foo().name;
js> var f2=new Foo().getName();
js> for each (var i in f.split("|")) System.out.println(i);

a
|
b
|
c
js> for each (var i in f2.split("|")) System.out.println(i);

a
|
b
|
c
js> var f3=new Foo().name+"";
js> for each (var i in f3.split("|")) System.out.println(i);
a
b
c
js> var f4=new Foo().getName()+"";
js> for each (var i in f4.split("|")) System.out.println(i);
a
b
c
js> for each (var i in f2.split("|")) System.out.println(i);

a
|
b
|
c
js> var f5=f2+"";//将java对象强制转换为Rhino的String对象
js> for each (var i in f2.split("|")) System.out.println(i);

a
|
b
|
c
js> for each (var i in f5.split("|")) System.out.println(i);
a
b
c
js> function a1(b1){}
js> function a1(b1){for each  (var i in b1.split("|")) System.out.println(i);}
js> a1(f2);

a
|
b
|
c
js> a1(f);

a
|
b
|
c
js> var f6=new Foo();
js> function a2(b2){var x=b2.getName();for each  (var i in x.split("|")) System.out.println(i);}
js> a2(f6);

a
|
b
|
c
js> f2.indexOf("|");
1
js> var f7="abc";//创建Rhino的String对象
js> f7=new String("abc");//创建Rhino的String对象
abc
js> for each (var i in f7.split("|")) System.out.println(i);
abc
js> f7=new String("a|bc");//创建Rhino的String对象
a|bc
js> for each (var i in f7.split("|")) System.out.println(i);
a
bc
js> f7=new java.lang.String("abc");//创建java的String对象
abc
js> f7=new java.lang.String("a|bc");//创建java的String对象
a|bc
js> for each (var i in f7.split("|")) System.out.println(i);

a
|
b
c
js> f7=new String("ab|c");
ab|c
js> for each (var i in f7.split("|")) System.out.println(i);
ab
c
js> f7=new java.lang.String("ab|c");
ab|c
js> for each (var i in f7.split("|")) System.out.println(i);

a
b
|
c
js> f7.indexOf("|");
2
js> for each (var i in f7.split("|")) System.out.println(i);

a
b
|
c
js>

最后总结:由于js中的split和java中的split方法的参数是不一样的,前者是普通字符串,后者是正则表达式
所以要注意你操作的String到底是js里的还是java里的

1:如果直接引用的是java对象的String或者是java对象的String类型的属性(他们都是java的对象),这时必须用java
的split,比如split("\\|");
2:如果是单纯的js的String对象,则直接用js的split("|");放普通字符串;
3:另外注意java的String里的indexOf(String arg1)和split(String regex)参数区别,一个是普通字符串,一个是
正则表达式;
4:在mozilla的Rhino官方网站的limit说明里有说:java的对象String可以+""后再赋值给js的一个var即可强制转换为js
的String.
eg:var f2=ja+"";//ja是java的String,那么f2就是js的String了,执行过后ja还是java的String不变
5:至于在Rhino的交互式界面导入自己定义的Foo对象,将Foo.class放入当前目录,然后启动Rhino的时候如下格式:
java -Xbootclasspath/a:. -jar js.jar
//具体意义参看http://coffeesweet.iteye.com/blog/735405
http://www.mozilla.org/rhino/scriptjava.html

http://web.archiveorange.com/archive/v/ZPEIkg8bmdJD5Hy6OnH3

注意,如果直接用jdk6的jrunscript怎么弄都不行,就报Foo找不到,郁闷.......

 

6:在Rhino里写代码的时候一定要注意是否与java.lang里的类冲突,java.lang包缺省在Rhino里是不加载的,这个和java类不同,一定要注意了...............

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值