Проблема сравнения строк - PullRequest
       7

Проблема сравнения строк

0 голосов
/ 08 августа 2011

Я пытаюсь сделать что-то действительно простое, что, по-видимому, чрезвычайно сложно в Android.Я просто хочу сравнить две строки, чтобы увидеть, равны ли они.

У меня есть временная переменная со значением "Location". Я отладил это, и оно действительно содержит Location ... Так что я попробовал это сначала

if(temp == "Location") { //do something }

Но я уже знаю, что это не работает.Затем я перепробовал все возможные функции для строки, такие как:

.equals .contains .ignoreCaseEquals и т. Д.Это действительно раздражает.

РЕДАКТИРОВАТЬ: Вот функция, где я сравниваю строки для тех из вас, кто хочет видеть.

public String[] getData(){ 
    try {
        int tempGroupCount = 0;
        URL food_url = new URL (Constants.SERVER_DINING);
        BufferedReader my_buffer = new BufferedReader(new InputStreamReader(food_url.openStream()));
        temp = my_buffer.readLine();
        // prime read
        while (temp != null ){
            // check to see if readline equals Location
            Log.w("HERasdfsafdsafdsafE", temp);
            // start a new location
            if (temp.equals("Location")
            {
                groups[tempGroupCount] = temp;
                tempGroupCount++;
            }
                Log.w("HERasdfsafdsafdsafE", temp);
                //start for-loop to test to get child info
                //for(temp = my_buffer.readLine(); temp != "Location" && temp != null; groupCount++, childrenCount++){
                    //children[groupCount][childrenCount] = temp;
                //}

            temp = my_buffer.readLine();
        }
        my_buffer.close();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.e("IO EXCEPTION", "Exception occured in MyExpandableListAdapter:" + e.toString());
    }
    return groups;
    }

Ответы [ 8 ]

3 голосов
/ 08 августа 2011

equals работает работает.Если temp.equals("Location") возвращает false, то ваша temp переменная не ссылается на строку со значением "Местоположение".

В строке могут быть непечатные символы или другие странности -Я предлагаю вам посмотреть на длину строки для проверки.В качестве альтернативы могут быть другие символы, которые выглядят как символы ASCII, но не являются таковыми.В отладчике попробуйте проверить массив и получить базовый массив символов - проверьте значение Unicode для каждого символа.

2 голосов
/ 08 августа 2011
if(temp.equals("Location"))
{
         //your code here
}
does not work

try this
if(temp.contains("Location"))
{
         //your code here
}
0 голосов
/ 08 августа 2011

вы можете попробовать следующее, чтобы выяснить, в чем ваша проблема.

final String LOCATION = "Location"; // just to make sure we use the very same character sequence

if (temp.equals(LOCATION)
{
    /* your code here */
}
else
{
    System.out.println("Location : " + Arrays.toString(LOCATION.getBytes(Charset.forName("UTF-8"))));
    System.out.println("temp     : " + Arrays.toString(temp.getBytes(Charset.forName("UTF-8"))));
}

Это должно вывести представление байтов обеих строк в стандартный вывод.Если equals () возвращает false, строки различаются.Из-за непечатаемых символов или похожих символов иногда бывает трудно найти разницу.Но байтовое представление должно показать вам.

(Я не программист Android, поэтому я надеюсь, что функции существуют на JVM Android. И извините за любые опечатки и пропущенные скобки - если есть; -)

0 голосов
/ 08 августа 2011
public String[] getData(){ 
    try {
        int tempGroupCount = 0;
        URL food_url = new URL (Constants.SERVER_DINING);
        BufferedReader my_buffer = new BufferedReader(new InputStreamReader(food_url.openStream()));
        temp = my_buffer.readLine();
        // prime read
        while (temp != null ){
            // check to see if readline equals Location
            Log.w("HERasdfsafdsafdsafE", temp);
            // start a new location
            if (temp.toString().equalsIgnoreCase("Location")
            {
                groups[tempGroupCount] = temp;
                tempGroupCount++;
            }
                Log.w("HERasdfsafdsafdsafE", temp);
                //start for-loop to test to get child info
                //for(temp = my_buffer.readLine(); temp != "Location" && temp != null; groupCount++, childrenCount++){
                    //children[groupCount][childrenCount] = temp;
                //}

            temp = my_buffer.readLine();
        }
        my_buffer.close();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.e("IO EXCEPTION", "Exception occured in MyExpandableListAdapter:" + e.toString());
    }
    return groups;
    }

сначала попытайтесь преобразовать "temp" в строку, затем сравните ее, примените это, возможно, вам поможет

0 голосов
/ 08 августа 2011

Я делаю тот же сценарий, он работает нормально.

    String result = responsePrimitiveData.toString();
if(!result.equals("0")){ 
     }
0 голосов
/ 08 августа 2011

Попробуйте сделать это:

if (temp.toLowerCase().compareTo("location") == 0)
0 голосов
/ 08 августа 2011

если ваша переменная temp равна String, вы также можете использовать метод compareTo(String).

if (temp.compareTo("Location") == 0) 
{ 
    //do something 
}
0 голосов
/ 08 августа 2011

попробуй как

if(temp.equals("Location")) { //do something }

и

while (!temp.equals("")){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...