Эквивалент Excel для Java String.contains (String otherString)


1

У меня есть клетка с довольно архаичной строкой. (Это стоимость маны Magic: The Gathering по буквам.) Примеры являются 3g, 2gg, 3ur, и bg. Есть 5 возможных букв ( g w u b r). У меня есть 5 столбцов, и я хотел бы посчитать внизу, сколько в них содержится. Так что моя таблица может выглядеть так

  A                   B        C  D  E  F  G
 +--------------------------------------------
1|Name                Cost     G  W  U  B  R
2|Centaur Healer      1gw      1  1  0  0  0
3|Sunspire Griffin    1ww      0  1  0  0  0 // just 1, even though 1ww
4|Rakdos Shred-Freak  {br}{br} 0  0  0  1  1

По сути, я хочу что-то похожее, =if(contains($A2,C$1),1,0)и я могу перетащить его через все 5 столбцов и опустить все 270 карт. (Между прочим, это фактические данные. Это не насмешливо :-).)

В Java я бы сделал это:

String[] colors = { "B", "G", "R", "W", "U" };
for(String color : colors) {
    System.out.print(cost.toUpperCase().contains(color) ? 1 : 0);
    System.out.print("\t");
}

Есть ли что-то подобное в использовании Excel 2010.

Я пытался использовать, find()и search()они отлично работают, если цвет существует. Но если цвет не существует, он возвращается #value- поэтому я получаю 1 1 #value #value #valueвместо 1 1 0 0 0, например, Centaur Healer (строка 2). Используемая формула была if(find($A2,C$1) > 0, 1, 0).

Ответы:


2

Что-то вроде этого =IF(ISERROR(FIND("text", A1)), "false", "true")должно работать.

Если вам нужно использовать подстановочные знаки, вы можете попробовать searchвместо find.


Это то, что я в конечном итоге использовал, за исключением того, что я использовал searchвместо find. Все еще не уверены, в чем разница, но это работает для моих целей.
CorsiKa

Из того, что я вижу и как я уже упоминал выше, поддержка подстановочных знаков, кажется, является главным (единственным?) Различием между ними. Кстати, еще один вариант, который может пригодиться:=IFERROR(FIND("text", A1), "error")
Каран

В дополнение к поддержке подстановочных знаков, SEARCHне чувствительна к регистру, а FINDесть.
Крис Нилсен

1

Я могу ошибаться, но я верю, что вы ищете find () .

FIND( substring, string, [start_position] )

1
Я пытался, findно если он не существует, у меня нет значения для сравнения. Вместо этого 0 1 0 0 0я получаю#VALUE 1 #VALUE #VALUE #VALUE
corsiKa

1
@corsiKa: Проверьте stackoverflow.com/questions/9513795/…, так как вы можете что-то осуществить, используя IFERROR. Иногда #VALUE также может означать, что столбец недостаточно широк, чтобы отобразить его ...
Тамара Вийсман

Том отлично. Я сделал, =IFERROR(IF(SEARCH(K$1,$E2)>0,1,0),0)и это сработало отлично. ( K$1,$E2есть эквивалент $A2,C$1в моем примере.
CorsiKa

1

Это будет делать:

=N(NOT(ISERR(SEARCH(C$1,$B2))))


1
Кстати, преимущество поиска заключается в том, что вам не нужно беспокоиться о кейсе ... И если вы хотите позже изменить эти 1 и 0 на что-то другое, это лучше: = IF (ISERR (SEARCH (C $ 1, $ B2)), 0,1)
Альберто
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.