2016-06-09 23 views
1

Hi生物學家在這裏有一點編碼背景。我的目標是能夠輸入字符串和代碼,以便能夠告訴我發生了多少次以及字符串中的什麼位置。 因此生病時會輸入一個字符串,我想要在字符串中的sq和tq的位置和豐度。與該位置是第一個字符如njnsqjjfl平方米將位於postition 4.字符串內字符的位置和重複

這是香港專業教育學院想出這麼遠(可能是非常錯誤的)什麼

string S = "..."; 
int counter =0; 
for(int i=0; i<s.length; i++){ 
if(s.charAt (i) == 'sq')} 
counter++;}) 

string S = "..."; 
int counter =0; 
for(int i=0; i<s.length; i++){ 
if(s.charAt (i) == 'tq')} 
counter++;}) 

任何輸入會有所幫助,三江源

+0

的可能的複製[如何找到字符串中的字符的第n次出現?(http://stackoverflow.com/問題/ 3976616/how-to-find-n-string-character-in-a-string) – Gideon

回答

-1

您應該不使用charAt,而是使用substring獲取String的一部分。

int count(String s, String target) { 
    int counter = 0; 
    int tlen = target.length(); 
    for (int i = tlen; i < s.length(); i++) { 
     if (s.substring(i - tlen, i).equals(target)) { 
      counter++; 
     } 
    } 
    return counter; 
} 

// in some method 
count("...", "sq"); 
count("...", "tq"); 
+0

給出了count而不是'和在字符串中的什麼位置' –

1

所以,你可以擁有的「平方」,並在你的代碼「TQ」多次出現,所以你可以有2周的ArrayList保存分開這兩個(或一個將它們保存在一起)。

ArrayList<Integer>sqLocation = new ArrayList<>(); 
ArrayList<Integer>tqLocation = new ArrayList<>(); 
for(int i =0;i<s.length()-1;i++){ 
if(s.charAt(i)=='s' && s.charAt(i+1)=='q'){ 
    sqLocation.add(i); 
    } 
else if(s.charAt(i)=='t' && s.charAt(i+1)=='q'){ 
    tqLocation.add(i); 
    } 
} 
System.out.println("No. of times sq occurs = "+sqLocation.size()); 
System.out.println("Locations ="+sqLocation); 
System.out.println("No. of times tq occurs = "+tqLocation.size()); 
System.out.println("Locations ="+tqLocation); 
+0

你們兩個都是明星 –

+0

高興地幫忙:) –

0

這可以使用正則表達式來實現。你的用例是計算這些事件的發生和位置。該方法匹配返回一個整數列表,它是位置和數量是列表的大小

〔實施例代碼

public class RegexTest { 
    public static List<Integer> match(String text, String regex) { 
     List<Integer> matchedPos = new ArrayList<>(); 
     Matcher m = Pattern.compile("(?=(" + regex + "))").matcher(text); 
     while(m.find()) { 
      matchedPos.add(m.start()); 
     } 

     return matchedPos; 
    } 

    public static void main(String[] args) { 
     System.out.println(match("sadfsagsqltrtwrttqsqsqsqsqsqs", "sq")); 
     System.out.println(match("sadfsagsqltrtwrttqksdfngjfngjntqtqtqtqtqtq", "tq")); 
    } 
} 
0

你想要的是一個HashMap <String, List <Integer>>

這將舉行,你正在尋找的字符串例如sq或tq,以及他們所處位置的列表。

要循環利用周圍看到String.indexOfhttps://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int)

僞碼是

String contents = "sadfsagsqltrtwrttqksdfngjfngjntqtqtqtqtqtq"; 

map.add (lookFor, new ArrayList()); 

int index = 0; 
while ((index = contents.indexOf (lookFor, index)) != -1) { 

    list = map.get (lookFor); 
    list.add (index); 
}