метод ежевики для замены строк? - PullRequest
2 голосов
/ 04 февраля 2010

Итак, опять же, из-за ограничений API Blackberry, у меня есть 2 вопроса:

  1. ответ, который я получаю от моего IOUtilities.streamToBytes (httpInput); вызов содержит "& lt;" персонажи. так какой класс / метод blackberry я могу использовать, чтобы заменить мой "& lt;" с "<"? в классе String есть ТОЛЬКО 1 метод replace (), и этот метод может заменить только 1 символ другим символом. Опять же, так как это проект Blackberry, у меня нет доступа к чему-либо выше Java 1.4 </p>

  2. ответ, который я также получаю от моего IOUtilities.streamToBytes (httpInput); вызов начинается с обычного ответа мыла "<? xml version =" 1.0 "encoding =" utf-8 "?> ". любой класс / метод blackberry, который я могу использовать, чтобы сообщить программе ТОЛЬКО ВЕРНУТЬ все между "<? xml version =" 1.0 "encoding =" utf-8 "?> " AND ""?

еще раз, спасибо всем вам за вашу помощь. очень признателен. я начинаю понимать, что разработка в среде blackberry порой утомительна, потому что некоторые java-классы (которые могут упростить кодирование) недоступны для использования.

Ответы [ 2 ]

5 голосов
/ 04 февраля 2010

То, с чем вы сталкиваетесь, вынуждено использовать профиль J2ME, основанный на более раннем выпуске J2SE.

У меня есть метод замены для строк, который я написал при нацеливании на более ранние платформы, который может быть вам полезен. Но обратите внимание, что вам действительно нужен синтаксический анализатор 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 для извлечения необходимой информации. В противном случае вы будете заняты какой-то (возможно, кудрявой) ручной работой.

Беглый взгляд на CLDC показывает, что он может быть основан на Java 1.1 (тьфу!). У DigiLife есть PDF-документ , в котором содержится более полезная информация о J2ME.

Зная, на какую конфигурацию (CDC или CLDC) и какой профиль (MIDP или PP) вы нацеливаетесь, крайне важно знать, какие API доступны. И обратите внимание, что даже если вы используете профиль на основе в J2SE 1.4, в нем могут отсутствовать все виды классов и методов, включая различные пакеты синтаксического анализа XML. Поэтому вам, возможно, придется самостоятельно предоставить альтернативы (или написать их самостоятельно).

РЕДАКТИРОВАТЬ : отмечу, что BlackBerry V5 doco включает пакеты синтаксического анализа XML.

2 голосов
/ 02 февраля 2011

Попробуйте эту страницу: http://supportforums.blackberry.com/t5/Java-Development/String-Manipulation-split-replace-replaceAll/ta-p/620038

Предоставляет функции для некоторых из отсутствующих строковых функций в J2ME

...