4

J2ME を使用して URL からクエリの名前と値のペアを抽出しようとしていますが、簡単ではありません。J2ME には java.net.URL クラスがなく、String にも分割メソッドがありません。

J2ME を使用して URL から名前と値のペアを抽出する方法はありますか? オープンソースの実装も大歓迎です。

4

7 に答える 7

4

私はkchauの答えが好きですが、データ構造を2つの配列から1つのハッシュテーブルに変更しただけです。これは、URL パラメータの数が不明な場合にも役立ちます。

    String url = "http://www.so.com?name1=value1&name2=value2&name3=value3";

    Hashtable values = new Hashtable();

    int s = url.indexOf("?");  
    int e = 0;

    while (s != -1) {
        e = url.indexOf("=", s);              
        String name = url.substring(s + 1, e);
        s = e + 1;                            
        e = url.indexOf("&", s);              

        if (e < 0) {
            values.put(name, url.substring(s, url.length()));
        } else {        
            values.put(name, url.substring(s, e));
        }

        s = e;
    }

    for (Enumeration num = values.keys(); num.hasMoreElements();) {
            String key = (String)num.nextElement();
            System.out.println(key + "  " + values.get(key));
    }
于 2009-01-21T16:11:07.240 に答える
2

Java JDK はオープンソースであるため、メインの JDK から Java URL クラスを借用してプロジェクトに追加することもできます。これにより、Java SE から同じ実装を使用できます。

http://www.docjar.com/html/api/java/net/URL.java.html

于 2010-07-01T20:04:47.630 に答える
2

これが私の刺し傷であり、Davidの答えといくつかの類似点があります。

    String url = "http://www.stackoverflow.com?name1=value1&name2=value2&name3=value3";

    String[] names  = new String[10];
    String[] values = new String[10];

    int s = url.indexOf("?");  // Get start index of first name
    int e = 0, idx = 0;

    while (s != -1) {
        e = url.indexOf("=", s);              // Get end index of name string
        names[idx] = url.substring(s+1, e);
        s = e + 1;                            // Get start index of value string
        e = url.indexOf("&", s);              // Get index of next pair

        if (e < 0)  // Last pair
            values[idx] = url.substring(s, url.length());
        else        // o.w. keep storing
            values[idx] = url.substring(s, e);

        s = e;
        idx++;
    }

    for(int x = 0; x < 10; x++)
        System.out.println(names[x] +" = "+ values[x]);

テストしましたが、うまくいくと思います。それが役に立てば幸いです、頑張ってください。

于 2009-01-21T02:12:13.110 に答える
1

また、URLパラメータはURLエンコードされているため、最初にデコードする必要がある場合があることに注意してください(これを行う方法は別の質問です)

私はこの方法でパラメータを取得します:


public String getUrlParam(String url, String param)
{
    int startIndex = url.indexOf(""+param+"=");
    if (startIndex == -1)
        return null;
    int length = (""+param+"=").length();
    int endIndex = url.indexOf("&", startIndex+length);
    if (endIndex == -1)
        endIndex = url.length();
    return URLDecode(url.substring(startIndex+length, endIndex));
}

于 2009-08-17T14:45:24.407 に答える
1

私の頭の上から、それは次のようになります(警告:テストされていません):

String url = ...;
int s = url.indexOf("?") + 1;
while (s > 0) {
    int e = url.indexOf("=", s);
    String name = url.substring(s, e), value;
    s = e + 1;
    e = url.indexOf("&", s);
    if (e < 0)
        value = url.substring(s, e);
    else
        value = url.substring(s, e);
    // process name, value
    s = e;
}

クエリ文字列は技術的には のようにアンパサンドの代わりにセミコロンで区切ることができますname1=value1;name2=value2;...。それがあなたにとって懸念事項である場合は、コードを修正できると確信しています。

于 2009-01-21T00:14:01.197 に答える
1

java.net.URL を持たない J2ME 実装がありますか? これは、Connected Device ConfigurationFoundation ProfilePersonal Basis Profile、およびPersonal Profileの一部です ...

編集:記録のために、これらはCDC 1.1.2リンクですが、JSR36によると、CDC 1.0には java.net.URL クラスもあります。

于 2009-01-21T16:42:49.593 に答える
-1

URL エンコーダー/デコーダーは非常にシンプルで簡単に記述できます。また、インターネット上でオープン ソースの HTML から WML へのトランスコーダー コードを検索して変更することもできます。難しすぎてはいけません。

于 2009-01-20T23:09:38.033 に答える