0

例として、私は次のようなことをしようとしています:

Arrays.asList(Serial.list()).indexOf("/dev/tty.usbmodem*");

これは可能ですか?または、これを達成するための適切な方法は何ですか。想定どおり、match の最初の要素を返せば問題ありません。条件に一致した文字列の新しい配列を返すある種の grep メソッドなどのメソッドがあれば、それも問題ないと思います。

4

3 に答える 3

3

ループを使用します

for(String s : list() )
     if(s.startsWith("start to look for "))
           return s;
于 2013-09-26T18:31:22.353 に答える
0

indexOf(Object)javadocには、メソッドが返すと記載されています

このリストで指定された要素が最初に出現するインデックス、またはこのリストに要素が含まれていない場合は -1

いいえ、それはできません。

でこれを行おうとしていると思いますList<String>が、インターフェイスはすべてのタイプのList. あなたがやろうとしていることはどのように機能しList<Integer>ますか?

独自の反復とパターン マッチングを行う必要があります。

于 2013-09-26T18:29:53.533 に答える
0

indexOfビルトインはこれを行わないため、他のソリューションが指摘するように、リストを単純に反復することができます。Java が提供すれば (そして実装が簡単で) よかったのindexOfは、述語を取り、述語を満たすリストの最初の要素を返す のバージョンです。前述したように、これをユーティリティ クラスに実装するのは非常に簡単です。簡単なバージョンは次のとおりです。

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;


public class StringUtil {

    interface Predicate<T> {
        boolean test( T object );
    }

    public static <T> int indexOf( final List<T> list, final Predicate<T> predicate ) { 
        final Iterator<T> it = list.iterator();
        for ( int i = 0; it.hasNext(); i++ ) {
            if ( predicate.test( it.next() )) {
                return i;
            }
        }
        return -1;
    }

    public static void main( String[] args ) {
        final List<String> list = Arrays.asList( "foo", "bar", "baz" );

        // Find the index of the first string that starts with "ba".
        final int index = indexOf( list, new Predicate<String>() {
            public boolean test( final String string ) {
                return string.startsWith( "ba" );
            }
        });

        // It's 1 (for "bar").
        System.out.println( index );
    }
}
于 2013-09-26T18:51:49.357 に答える