Сравнение строк в какао

для имени изображения, как I_A_Mok сказал, что я взял только:


    android_security
    penetration_testing
    red_team
    lf
    the_art_of_exploitation
    web_application_hacker 
    lbh 
    bhp 

Итак, у меня было два решения:

Метод с Context: [117 ]

public static Integer[] getIds(Context context, String[] str) {

    Integer[] bookID = new Integer[str.length];
    for (int i = 0; i < str.length; i++) {
        bookID[i] = context.getResources().getIdentifier(str[i], "drawable", context.getPackageName());
    }
    return bookID;
}

Или без контекста (этот подход быстрее, чем первый Получение ресурсов в Android ):

public static Integer[] getIds(String[] str) {

    Integer[] bookID = new Integer[str.length];

    try {
        for (int i = 0; i < str.length; i++) {
            Class res = R.drawable.class;
            Field field = res.getField(str[i]);
            int drawableId = field.getInt(null);
            bookID[i] = drawableId;
        }
    } catch (Exception e) {
        Log.e("MyTag", "Failure to get drawable id.", e);
        e.printStackTrace();

    }
    return bookID;
}

и вот полный код

[113 ]

}

Спасибо.

18
задан mattdwen 19 May 2009 в 07:01
поделиться

5 ответов

Прежде всего , вы используете оператор == для сравнения двух указателей на объекты (типа NSString * ). Таким образом, возвращается истина, когда указатели одинаковы, а не когда строки имеют одинаковое содержимое. Если вы хотите сравнить, являются ли две строки одинаковыми, вы должны использовать isEqualToString: или isEqual: ( isEqual: является более общим, поскольку он работает для всех типов объектов).

Во-вторых, сравните: возвращает 0 ( NSOrderSame ), если они одинаковы, и 1 ( NSOrderedDescending ), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).

Таким образом, возвращается истина, когда указатели одинаковы, а не когда строки имеют одинаковое содержимое. Если вы хотите сравнить, являются ли две строки одинаковыми, вы должны использовать isEqualToString: или isEqual: ( isEqual: является более общим, поскольку он работает для всех типов объектов).

Во-вторых, сравните: возвращает 0 ( NSOrderSame ), если они одинаковы, и 1 ( NSOrderedDescending ), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).

Таким образом, возвращается истина, когда указатели одинаковы, а не когда строки имеют одинаковое содержимое. Если вы хотите сравнить, являются ли две строки одинаковыми, вы должны использовать isEqualToString: или isEqual: ( isEqual: является более общим, поскольку он работает для всех типов объектов).

Во-вторых, сравните: возвращает 0 ( NSOrderSame ), если они одинаковы, и 1 ( NSOrderedDescending ), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).

или isEqual: ( isEqual: является более общим, поскольку он работает для всех типов объектов).

Во-вторых, compare: возвращает ] 0 ( NSOrderSame ), когда они одинаковы, и 1 ( NSOrderedDescending ), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).

или isEqual: ( isEqual: является более общим, поскольку он работает для всех типов объектов).

Во-вторых, compare: возвращает ] 0 ( NSOrderSame ), когда они одинаковы, и 1 ( NSOrderedDescending ), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).

45
ответ дан 30 November 2019 в 05:50
поделиться
[returnedString isEqualToString: @"thisString"]
12
ответ дан 30 November 2019 в 05:50
поделиться

При сравнении двух идентичных строк compare вернет NSOrderedSame , что равно 0. Он также может вернуть NSOrderedAscending , -1 , и NSOrderedDescending , 1.

Вы можете предпочесть использовать isEqualToString , который возвращает YES или NO.

5
ответ дан 30 November 2019 в 05:50
поделиться

Оператор == при применении к объектам проверяет, равны ли указатели.

Вы должны использовать метод -compare или один из его спутников - compare: options: - compare: options: range: или -compare: options: range: locale: , которые возвращают NSComparisonResult ( NSOrderAscending , NSOrderSame , NSOrderDescending )

Если вам просто нужно сравнение на равенство, вы можете использовать -StringE232To ], который возвращает значение BOOL .

2
ответ дан 30 November 2019 в 05:50
поделиться
if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");
5
ответ дан 30 November 2019 в 05:50
поделиться