2010-01-01 72 views
4

我有字符串比較問題。例如,有這樣的字符串:Java中的子串搜索

"hello world i am from heaven" 

我想搜索該字符串是否包含「world」。我使用了以下功能,但它們有一些問題。我使用String.indexof(),但如果我嘗試搜索「w」,它會說它存在。

總之,我認爲我在尋找確切的比較。 Java中有沒有好的功能?

在Java中還有什麼函數可以計算log base 2嗎?

+3

@agazerboy - 不要把兩個完全不相關的問題成爲一個問題。 – 2010-01-01 02:25:39

+0

因此,在「w」情況下,您期望返回錯誤的東西,因爲它不是一個完整的單詞? – PSpeed 2010-01-01 03:10:10

回答

23

我假設你正在使用indexOf()使用字符版本與您有問題(否則爲什麼你會成爲搜索用W看世界的時候?)。如果是這樣,indexOf()可以有一個字符串參數來搜索:

String s = "hello world i am from heaven"; 
if (s.indexOf("world") != -1) { 
    // it contains world 
} 

爲日誌基地2個,這很簡單:

public static double log2(double d) { 
    return Math.log(d)/Math.log(2.0d); 
} 
+0

我爆炸每個字符串做我的應用程序的某種比較。有一段時間它也會得到單一的CHAR,所以它會產生這些問題。如果我想通過自己傳遞參數,那麼我知道我可以傳遞一個字符串。但那是在運行時間。你可以請另一種解決方案嗎 – user238384 2010-01-01 01:50:26

+0

或者你也可以說我是在一個字符串,並在運行時它得到arugment「或」再次,它會說YES EXIST – user238384 2010-01-01 01:52:25

+4

對不起,我真的不明白你想要做什麼找組織。你可以解釋嗎? – cletus 2010-01-01 02:17:31

9

對於一個確切的字符串對比,可以簡單地做:

boolean match = stringA.equals(stringB); 

如果你想檢查一個字符串是否包含子字符串,你可以這樣做:

boolean contains = string.contains(substring); 

更多字符串的方法,請參閱javadocs

0

你好我的版本是如下:

package com.example.basic; 

public class FindSubString { 


    public String findTheSubString(String searchString, String inputString){ 


     StringBuilder builder = new StringBuilder(inputString); 

     System.out.println("The capacity of the String " + builder.capacity()); 

     System.out.println("pos of" + builder.indexOf(searchString)); 

     return builder.substring(builder.indexOf(searchString),builder.indexOf(searchString)+searchString.length()); 
    } 

    public static void main(String[] args) { 

     String myString = "Please find if I am in this String and will I be found"; 
     String searchString = "I am in this String"; 

     FindSubString subString = new FindSubString(); 

     boolean isPresent = myString.contains(searchString); 

     if(isPresent){ 

     System.out.println("The substring is present " + isPresent + myString.length()); 

     System.out.println(subString.findTheSubString(searchString,myString)); 
     } 
     else 
     { 
      System.out.println("The substring is ! present " + isPresent); 

     } 
    } 
} 

請讓我知道,如果它是有用的。

0

我得到了解決最後。

public void onTextChanged(CharSequence s, int start, int before, int count) { 

         ArrayList<HashMap<String, String>> arrayTemplist = new ArrayList<HashMap<String, String>>(); 
         String searchString = mEditText.getText().toString(); 
         if(searchString.equals("")){new DownloadJSON().execute();} 

        else{ 


        for (int i = 0; i < arraylist.size(); i++) { 
         String currentString = arraylist.get(i).get(MainActivity.COUNTRY); 
         if (searchString.toLowerCase().contains(currentString.toLowerCase())) { 
    //pass the character-sequence instead of currentstring 

          arrayTemplist.add(arraylist.get(i)); 
         } 
        } 
         } 
         adapter = new ListViewAdapter(MainActivity.this, arrayTemplist); 
         listview.setAdapter(adapter); 

       } 


      }); 
    } 

這一個替換上面的代碼:

public void onTextChanged(CharSequence s, int start, int before, int count) { 

         ArrayList<HashMap<String, String>> arrayTemplist = new ArrayList<HashMap<String, String>>(); 
         String searchString = mEditText.getText().toString(); 
         if(searchString.equals("")){new DownloadJSON().execute();} 

        else{ 


        for (int i = 0; i < arraylist.size(); i++) { 
         String currentString = arraylist.get(i).get(MainActivity.COUNTRY); 
         if (currentString.toLowerCase().contains(searchString.toLowerCase())) { 
    //pass the character-sequence instead of currentstring 

          arrayTemplist.add(arraylist.get(i)); 
         } 
        } 
         } 
         adapter = new ListViewAdapter(MainActivity.this, arrayTemplist); 
         listview.setAdapter(adapter); 

       } 


      }); 
+0

當你也解釋你在新代碼中改變了什麼以及爲什麼它會有所幫助時更好。 – Psytho 2015-12-18 09:00:23