How can I iterate over a string in Java?

public static Boolean cmprStr( String s1, String s2 ) { // STUFF } 

I want to iterate through s1 so that every character in s1 is included in s2.

+6
source share
9 answers
 public static Boolean cmprStr( String s1, String s2 ) { for (int i = s1.length() - 1; i >= 0; --i) { if (s2.indexOf(s1.charAt(i)) == -1) { return Boolean.FALSE; } } return Boolean.TRUE; } 
+10
source
  for(char c: s1.toCharArray()){ if(s2.indexOf(c) == -1){ return false; } } return true; 

Assuming that

  s1 = "aabb"; s2 = "ccddaannbbss"; 

will return true.

+9
source
 length() 

will give you the length of the string

 charAt( someIndex) 

will give you the character at the given position, so you can iterate the first line.

 indexOf( achar ) 

will give you the char mark in the string, or -1 if not specified. therefore, you should be able to search for each character in the first line in the second.

+8
source

All other answers are O (n ^ 2). Here's a path that is linear in time (i.e. O (n)) using Google Guava :

  public static boolean cmprStr(String s1, String s2) { Set<Character> desiredCharacters = Sets.newHashSet(Lists.charactersOf(s2)); return Sets.difference(Sets.newHashSet(Lists.charactersOf(s1)), desiredCharacters).isEmpty(); } 
+3
source
 Set<Character> charsInS1 = new HashSet<Character>(); for (int i = 0; i < s1.length(); i++) { charsInS1.add(s1.charAt(i)); } for (int i = 0; i < s2.length(); i++) { charsInS1.remove(s2.charAt(i)); } return charsInS1.isEmpty(); 

This is the complexity of O(n+m) ... responses using indexOf has the complexity of O(n*m) . Of course, this temporarily uses a little extra memory.

+2
source

Why don't you just use the 'equals' method?

 Boolean b = s1.equals(s2); 
+1
source

As I understand it, the question would be.

 //for each character in s1 //if s2 does not contain character return false //return true for(int i = 0; i < length s1; i++){ if(!s2.contains(String.valueOf(s1.charAt(i)))){ return false; } } return true; 

This checks that every character in s1 is in s2. He does not confirm the order, nor how many are there, and is not a method of equals.

Recursive:

 public static Boolean cmprStr( String s1, String s2 ) { if(s1.length() == 0 ) { return true; } if(!s2.contains(s1.substring(0,1))) { return false; } return cmprStr(s1.substring(1), s2); } 
0
source

Each String also a CharSequence in Java. Therefore, you can easily iterate over String with a simple loop:

 int n = s.length(); for (int i = 0; i < n; ++i) { char c = s.charAt(i); ... } 
0
source
 // Here some code I wrote to find CG ratio in a gene public double findCgRatio(String gene) { double cCount =0.0; double gCount =0.0; gene = gene.toLowerCase(); for(char character : gene.toCharArray()) { if(character == 'c') { cCount++; } else if(character == 'g') { gCount++; } } System.out.println("CG Ratio was :" + (cCount/gCount) ); return cCount/gCount; // cgRatio } 
0
source

Source: https://habr.com/ru/post/889392/


All Articles