Hackerrank Java String Tokens Solution
Given a string, , matching the regular expression [A-Za-z !,?._'@]+
, split the string into tokens. We define a token to be one or more consecutive English alphabetic letters. Then, print the number of tokens, followed by each token on a new line.
Note: You may find the String.split method helpful in completing this challenge.
Input Format
A single string, .
Constraints
- is composed of any of the following: English alphabetic letters, blank spaces, exclamation points (
!
), commas (,
), question marks (?
), periods (.
), underscores (_
), apostrophes ('
), and at symbols (@
).
Output Format
On the first line, print an integer, , denoting the number of tokens in string (they do not need to be unique). Next, print each of the tokens on a new line in the same order as they appear in input string .
Sample Input
He is a very very good boy, isn't he?
Sample Output
10
He
is
a
very
very
good
boy
isn
t
he
Explanation
We consider a token to be a contiguous segment of alphabetic characters. There are a total of such tokens in string , and each token is printed in the same order in which it appears in string .
Solution in java8
Approach 1.
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
scan.close();
String splits[] = s.split("[!,?._'@ ]");
splits = Arrays.asList(splits).stream().filter(str -> !str.isEmpty()).collect(Collectors.toList()).toArray(new String[0]);
System.out.println(splits.length);
for(String z : splits)
System.out.println(z);
}
}
Approach 2.
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
scan.close();
// Write your code here.
s = s.trim();
if (s.length() == 0) {
System.out.println(0);
} else {
String[] strings = s.split("['!?,._@ ]+");
System.out.println(strings.length);
for (String str : strings)
System.out.println(str);
}
}
}
Approach 3.
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
if(!scan.hasNext()){
System.out.println("0");
return;
}
String s = scan.nextLine();
scan.close();
// Write your code here.
String[] tokens = s.trim().split("[!,?.*_'@\\ ]+");
int size = tokens.length;
System.out.println(size);
for(int i=0; i<size; i++){
System.out.println(tokens[i]);
}
}
}