字符串中字符的位置和重复

时间:2016-06-09 05:23:26

标签: java string counter

嗨,这里的生物学家有一点编码背景。我的目标是能够输入一串字符和代码,以便能够告诉我它们发生了多少次以及字符串中的哪个位置。 如此错误输入一个字符串,我想要字符串中的sq和tq的位置和丰富。位置是第一个字符,例如njnsqjjfl sq将位于第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++;})

任何输入都会有所帮助,谢谢

4 个答案:

答案 0 :(得分:1)

所以,你可以多次出现&#34; sq&#34;和&#34; tq&#34;在你的代码中,所以你可以有2个arraylists来分别保存这两个(或者一个将它们保存在一起)。

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

答案 1 :(得分:0)

这可以使用正则表达式来实现。您的用例是计算这些事件的发生次数和位置。方法匹配返回一个整数列表,即位置和count是列表的大小

Exmaple code

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

答案 2 :(得分:0)

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

这将保留您正在寻找的字符串,例如sq或tq,以及它们所处位置的列表。

您希望使用String.indexOf循环播放,请参阅https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int)

psuedocode正在

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

答案 3 :(得分:-1)

您不应该使用charAtsubstring来获取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");