2016-06-09 9 views
1

Hallo Biologe hier mit ein wenig Codierung Hintergrund. Mein Ziel ist es, eine Zeichenkette und den Code eingeben zu können, um mir sagen zu können, wie oft sie vorkommen und an welcher Stelle in der Zeichenkette. so krank Betreten Sie eine Zeichenfolge und ich möchte die Position und Häufigkeit von sq und tq innerhalb der Zeichenfolge. mit der Lage das erste Zeichen zB njnsqjjfl sq sein würde Postition 4.Position und Wiederholung von Zeichen in einer Zeichenfolge

befinden Dies ist, was ive kommen mit bisher (wahrscheinlich sehr falsch)

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++;}) 

jede Eingabe helfen, thankyou

+0

Mögliche Duplikat von [Wie n-te Auftreten von Zeichen in einer Zeichenfolge zu finden?] (Http://stackoverflow.com/ Fragen/3976616/how-to-find-nth-Vorkommen von-Zeichen-in-einer-Zeichenfolge) – Gideon

Antwort

-1

Sie sollten nicht charAt, sondern substring verwenden, um einen Teil von String zu erhalten.

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

gibt die Anzahl aber nicht 'und an welcher Stelle in der Zeichenfolge ' –

1

So können Sie mehrere Vorkommen von „Quadrat“ und „TQ“ in Ihrem Code haben, so können Sie 2 Arraylisten müssen diese beiden separat zu speichern (oder man sie zusammen zu sparen).

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

Sie sind zwei Sterne –

+0

glücklich zu helfen :) –

0

Dies kann mit Regex erreicht werden. Ihr Anwendungsfall ist das Zählen von Vorkommen und die Position dieser Vorkommen. Das Verfahren Spiel gibt eine ganze Liste, die Position und Anzahl ist Größe der Liste

Exmaple Code ist

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

, was Sie wollen, ist ein HashMap <String, List <Integer>>

dies halten, die Zeichenfolge, die Sie suchen z.B sq oder tq und eine Liste der Positionen, auf denen sie sich befinden.

Sie wollen Schleife um mit String.indexOf siehe https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int)

psuedocode sein

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); 
} 
Verwandte Themen