嗨,这里的生物学家有一点编码背景。我的目标是能够输入一串字符和代码,以便能够告诉我它们发生了多少次以及字符串中的哪个位置。 如此错误输入一个字符串,我想要字符串中的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++;})
任何输入都会有所帮助,谢谢
答案 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)
您不应该使用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");