Как разобрать URL в J2ME - PullRequest
       37

Как разобрать URL в J2ME

4 голосов
/ 21 января 2009

Я пытаюсь извлечь пары имя-значение запроса из URL, используя J2ME, но это не облегчает задачу. J2ME не имеет класса java.net.URL и не имеет метода String.

Есть ли способ извлечь пары имя-значение из URL, используя J2ME? Также приветствуются любые реализации с открытым исходным кодом.

Ответы [ 7 ]

4 голосов
/ 21 января 2009

Мне нравится kchau ответ, но я просто изменил структуру данных с двух массивов на один Hashtable. Это также поможет, если число параметров 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));
    }
2 голосов
/ 02 июля 2010

Поскольку Java JDK является открытым исходным кодом, вы также можете позаимствовать класс java URL из основного JDK и добавить его в свой проект. Это позволит вам использовать ту же реализацию из Java SE:

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

2 голосов
/ 21 января 2009

Вот мой удар, некоторое сходство с ответом Дэвида.

    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]);

Протестировал, и я думаю, что это работает. Надеюсь, это поможет, удачи.

1 голос
/ 17 августа 2009

Также обратите внимание, что 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));
}

1 голос
/ 21 января 2009

Есть реализация J2ME, у которой нет java.net.URL? Он является частью конфигурации подключенного устройства , Foundation Profile , Personal Basis Profile и Personal Profile ...

Редактировать: для справки: это ссылки CDC 1.1.2, но согласно JSR36 , CDC 1.0 также имеет класс java.net.URL.

1 голос
/ 21 января 2009

С макушки головы это будет выглядеть примерно так (предупреждение: не проверено):

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;..., хотя я никогда не видел, чтобы это делалось на практике. Если это вас беспокоит, я уверен, что вы можете исправить код для него.

0 голосов
/ 21 января 2009

URL-кодировщик / декодер действительно прост и легок в написании. Вы также можете найти любой код транскодера с открытым исходным кодом HTML в WML в Интернете и изменить его. Не должно быть слишком сложно.

...