所以,再次,由于黑莓的api限制,我有两个问题:
我从IOUtilities.streamToBytes(httpInput)回来的回复; call包含“& lt;”字符。那么我可以使用什么黑莓类/方法来取代我的“& lt;”用“<”? String类中只有1个replace()方法,该方法只能用另一个字符替换1个字符。同样,由于这是一个黑莓项目,我无法访问java 1.4以上的任何内容
我也从我的IOUtilities.streamToBytes(httpInput)回来的回复;呼叫以通常的肥皂响应开始“<?xml version =”1.0“encoding =”utf-8“?>< string xmlns =”http://www.mydomain.com“>”。任何黑莓类/方法,我可以用来告诉程序只返回“<?xml version =”1.0“encoding =”utf-8“?>< string xmlns =”http:// www。 mydomain.com “>” 中AND“< / string>”?
答案 0 :(得分:5)
您遇到的情况是被迫使用基于早期J2SE版本的J2ME配置文件。
我有一个替换实用程序方法,用于我在定位早期平台时编写的字符串,这可能对您有用。但要注意你真正想要的是一个XML解析器;只更换字符串只有在XML 非常简单时才会起作用。
static public String replace(String val, String fnd, String rpl, boolean igncas) {
int fl=(fnd==null ? 0 : fnd.length());
if(fl>0 && val.length()>=fl) {
StringBuffer sb=null; // string buffer
int xp=0; // index of previous fnd
for(int xa=0,mi=(val.length()-fl); xa<=mi; xa++) {
if(val.regionMatches(igncas,xa,fnd,0,fl)) {
if(xa>xp) { sb=append(sb,val.substring(xp,xa)); } // substring uses private construct which does not dup char[]
sb=append(sb,rpl);
xp=(xa+fl);
xa=(xp-1); // -1 to account for loop xa++;
}
}
if(sb!=null) {
if(xp<val.length()) { sb.append(val.substring(xp,val.length())); } // substring uses private construct which does not dup char[]
return sb.toString();
}
}
return val;
}
static private StringBuffer append(StringBuffer sb, String txt) {
if(sb==null) { sb=new StringBuffer(txt.length()); }
sb.append(txt);
return sb;
}
至于问题的第二部分,您需要使用XML解析器来提取所需的信息。否则你将参加一些(可能是kludgy)手工工作。
快速浏览CLDC表明它可能基于Java 1.1(唉!)。 DigiLife有一个PDF document,它有一些关于J2ME的更好的信息。
了解您要定位的配置(CDC或CLDC)和哪个配置文件(MIDP或PP)对于了解哪些API可用至关重要。请注意,即使您在J2SE 1.4上使用基于的配置文件,它也可能缺少各种类和方法,包括各种XML解析包。因此,您可能必须自己从第三方提供替代方案(或自己编写)。
编辑:我注意到BlackBerry V5 doco确实包含XML解析器包。
答案 1 :(得分:2)
它为J2ME中缺少的一些String函数提供函数