Como analisar um URL em J2ME

votos
4

Eu estou tentando extrair pares nome-valor da consulta a partir de uma URL usando J2ME, mas não torná-lo fácil. que J2ME não tem a classe java.net.URL nem cordas têm um método de divisão.

Existe uma maneira de extrair pares nome-valor a partir de uma URL usando J2ME? Quaisquer implementações de código aberto seria bem-vinda também.

Publicado 21/01/2009 em 00:00
fonte usuário
Em outras línguas...                            


7 respostas

votos
4

Eu gosto kchau resposta, mas eu só mudou a estrutura de dados a partir de duas matrizes para um Hashtable. Isso também irá ajudar se o número de parâmetros de URL é desconhecida.

    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));
    }
Respondeu 21/01/2009 em 17:11
fonte usuário

votos
2

Desde o Java JDK é open-source, você também pode pedir a classe java URL da principal JDK e adicioná-lo ao seu projeto. Isso permitirá que você use a mesma implementação do Java SE:

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

Respondeu 01/07/2010 em 21:04
fonte usuário

votos
2

Aqui está a minha facada nele, alguma semelhança com a resposta de 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]);

Testado, e eu acho que funciona. Espero que ajude, boa sorte.

Respondeu 21/01/2009 em 03:12
fonte usuário

votos
1

Além disso, observe, que params URL são URL codificado, assim você pode precisar de decodificá-las primeiro (como fazê-lo é outra questão)

Recebo parâmetros da seguinte maneira:


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

Respondeu 17/08/2009 em 15:45
fonte usuário

votos
1

Há uma aplicação J2ME que não tem java.net.URL? É parte da configuração do dispositivo conectado , Fundação perfil , Personal Basis Profile e perfil pessoal ...

Edit: Para o registro, estes são os CDC 1.1.2 links, mas de acordo com JSR36 , CDC 1.0 também tem uma classe java.net.URL.

Respondeu 21/01/2009 em 17:42
fonte usuário

votos
1

Em cima da minha cabeça, seria algo como isto (aviso: não testado):

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;
}

Seqüências de consulta pode tecnicamente ser separados por um ponto e vírgula em vez de um e comercial, como name1=value1;name2=value2;..., embora eu nunca vi isso feito na prática. Se isso é uma preocupação para você, tenho certeza que você pode corrigir o código para ele.

Respondeu 21/01/2009 em 01:14
fonte usuário

votos
-1

A URL codificador / decodificador é realmente simples e fácil de escrever. Você também pode procurar qualquer HTML de código aberto para o código transcodificador WML na internet e modificá-lo. Não deve ser muito difícil.

Respondeu 21/01/2009 em 00:09
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more