I'm trying to get the number of matched words in an ArrayList in my Java program
This is the whole thing: The problem is with the numMatch class:
import java.util.*;
public class WordPairsList {
private ArrayList<WordPair> allPairs;
public WordPairsList(String[] words)
{
allPairs = new ArrayList<WordPair>();
for (int i = 0; i < words.length - 1; i++){
for (int j = i + 1; j < words.length; j++){
if (j == i){
allPairs.add( new WordPair(words[i], words[j]));
}
}
}
}
public int numMatches() {
/* in here I need to have a for loop that goes through the ArrayList allPairs and for
each WordPair in allPairs, it checks to see if its first word (using the getFirst() method)
equals the second word (using the getSecond() method). If there is a match, it increments a
counter which it returns at the end of the method. To test this method, add another “there” into
the words array and then uncomment the call to numMatches().
*/
return 0;
}
public String getFirst() {
return allPairs.getFirst();
}
public String getSecond() {
return allPairs.getSecond();
}
public String toString() {
return allPairs.toString();
}
public static void main(String[] args) {
String[] words = {"Hi", "there", "Tyler", "Sam"};
WordPairsList list = new WordPairsList(words);
System.out.println(list);
//For second part below, uncomment this test:
System.out.println("The number of matched pairs is: " + list.numMatches());
}
}
class WordPair {
private String word1;
private String word2;
public WordPair(String w1, String w2) {
word1 = w1;
word2 = w2;
}
public String getFirst() {
return word1;
}
public String getSecond() {
return word2;
}
public String toString() {
return "(" + word1 + ", " + word2 + ")";
}
}
So I need help with how to call the getFirst() and getSecond() Methods and how to compare them using a for loop! I also don't know how to set a counter to count how many similar words are there! can you please help me!
Thanks!
Not sure if this is what you need, but this will iterate over the list of wordpairs and count them:
import java.util.*;
class WordPairsList {
//can be final and List interface
private final List<WordPair> allPairs;
public WordPairsList(String[] words)
{
allPairs = new ArrayList<>();
//As I understood it you want to take the input and generate word pair from every two words?
for (int i = 0; i < words.length - 1; i += 2){
allPairs.add( new WordPair(words[i], words[i+1]));
}
}
public int numMatches() {
//initialize your count variable
int count = 0;
//loop over your word pairs (if your java version doesn't support this, use a for(int i = 0....) loop as seen above
for (WordPair wordPair : allPairs) {
///debug print
System.out.println("Testing: "+ wordPair.toString());
//check if pair.getfirst equals pair.getsecond
if(wordPair.getFirst().equals(wordPair.getSecond())){
//increase count
count += 1;
}
}
//return count
return count;
}
public static void main(String[] args) {
String[] words = {"Hi", "there", "Tyler", "Sam", "Bob", "Bob"};
WordPairsList list = new WordPairsList(words);
System.out.println("The number of matched pairs is: " + list.numMatches());
}
}
class WordPair {
private final String word1;
private final String word2;
public WordPair(String w1, String w2) {
word1 = w1;
word2 = w2;
}
public String getFirst() {
return word1;
}
public String getSecond() {
return word2;
}
public String toString() {
return "(" + word1 + ", " + word2 + ")";
}
}
This program I wrote to display the number of words available in the given String.
Now I want the logic for occurenceof each word in the string without using any built in method.
import java.util.Scanner;
public class Test80
{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.println("Enter your sentence:[Try to ignore space at end]");
String s=in.nextLine();
System.out.println("Size of the string is "+s.length());
int res=count(s);
System.out.println("No of words in the given String --->>"+" "+s+" :"+"is"+" :"+res);
}
private static int count(String s) {
int count=0;
if(s.charAt(0)!=' ')
{
count++;
}
for(int i=0;i<s.length();i++)
{
if((s.charAt(i)==' ')){
count++;
}
}
return count;
}
}
Instead of doing all that use the logic that if there are 'n' spaces in a sentence then the number of words will be n+1 simply;
Modify the program with if else .
In the count method do this
private static int count(String s) {
int count=0;
for(i=0;i<s.length();i++)
{
if(s.charAt(i)==' ') count++;
}
return (count+1);//returning the number of words
}
Depending on your definition of built in method you should use a Map for that task.
Map<String,Integer> = new HashMap<>();
int begin_pos = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == ' '){
int count = map.containsKey(s.substring(begin_pos, i)) ? map.get(s.substring(begin_pos, i)) : 0;
map.put(s.substring(begin_pos, i), count + 1);
begin_pos = i+1;
}
else if(i == s.length() -1){
int count = map.containsKey(s.substring(begin_pos)) ? map.get(s.substring(begin_pos)) : 0;
map.put(s.substring(begin_pos), count + 1);
}
}
I am trying to solve an excercise about a method that returns a new string in which the uppercase letters are changed to lowercase and lowercase letters are changed to uppercase.
It just return the first character of the string, i don't know what keeps causing it.
Here is my code:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a string: ");
String s = input.nextLine();
System.out.print("The new string is: " + swapCase(s));
}
public static String swapCase(String s) {
for (int i = 0; i < s.length(); i++) {
if (Character.isLowerCase(s.charAt(i))) {
s = String.valueOf(Character.toUpperCase(s.charAt(i)));
} else if (Character.isUpperCase(s.charAt(i))) {
s = String.valueOf(Character.toLowerCase(s.charAt(i)));
}
}
return s;
}
}
You are redefining the String s every iteration of your loop. You will want to concatenate your new chararcters to form a final case-swapped string.
public static String swapCase(String s) {
String swapped = "";
for (int i = 0; i < s.length(); i++) {
if (Character.isLowerCase(s.charAt(i))) {
swapped += String.valueOf(Character.toUpperCase(s.charAt(i)));
} else if (Character.isUpperCase(s.charAt(i))) {
swapped += String.valueOf(Character.toLowerCase(s.charAt(i)));
}
}
return swapped;
}
Is there a java built-in method to count occurrences of a char in a string ?
for example:
s= "Hello My name is Joel"
the number of occurrences of l is 3
Thanks
There is no such method, but you can do:
String s = "Hello My name is Joel";
int counter = 0;
for( int i=0; i<s.length(); i++ ) {
if( s.charAt(i) == 'l' ) {
counter++;
}
}
(code from Simple way to count character occurrences in a string)
If you want to count the number of times multiple characters have appeared in a particular string, then mapping of characters with their number of occurrences in the string will be a good option. Here's how one would achieve the solution in that case:
import java.util.HashMap;
import java.util.Map;
public class CharacterMapper
{
private Map<Character, Integer> charCountMap;
public CharacterMapper(String s)
{
initializeCharCountMap(s);
}
private void initializeCharCountMap(String s)
{
charCountMap = new HashMap<>();
for (int i = 0; i < s.length(); i++)
{
char ch = s.charAt(i);
if (!charCountMap.containsKey(ch))
{
charCountMap.put(ch, 1);
}
else
{
charCountMap.put(ch, charCountMap.get(ch) + 1);
}
}
}
public int getCountOf(char ch)
{
if (charCountMap.containsKey(ch))
return charCountMap.get(ch);
return 0;
}
public static void main(String[] args)
{
CharacterMapper ob = new CharacterMapper("Hello My name is Joel");
System.out.println(ob.getCountOf('o')); // Prints 2
}
}
I want to split string without using split . can anybody solve my problem I am tried but
I cannot find the exact logic.
Since this seems to be a task designed as coding practice, I'll only guide. No code for you, sir, though the logic and the code aren't that far separated.
You will need to loop through each character of the string, and determine whether or not the character is the delimiter (comma or semicolon, for instance). If not, add it to the last element of the array you plan to return. If it is the delimiter, create a new empty string as the array's last element to start feeding your characters into.
I'm going to assume that this is homework, so I will only give snippets as hints:
Finding indices of all occurrences of a given substring
Here's an example of using indexOf with the fromIndex parameter to find all occurrences of a substring within a larger string:
String text = "012ab567ab0123ab";
// finding all occurrences forward: Method #1
for (int i = text.indexOf("ab"); i != -1; i = text.indexOf("ab", i+1)) {
System.out.println(i);
} // prints "3", "8", "14"
// finding all occurrences forward: Method #2
for (int i = -1; (i = text.indexOf("ab", i+1)) != -1; ) {
System.out.println(i);
} // prints "3", "8", "14"
String API links
int indexOf(String, int fromIndex)
Returns the index within this string of the first occurrence of the specified substring, starting at the specified index. If no such occurrence exists, -1 is returned.
Related questions
Searching for one string in another string
Extracting substrings at given indices out of a string
This snippet extracts substring at given indices out of a string and puts them into a List<String>:
String text = "0123456789abcdefghij";
List<String> parts = new ArrayList<String>();
parts.add(text.substring(0, 5));
parts.add(text.substring(3, 7));
parts.add(text.substring(9, 13));
parts.add(text.substring(18, 20));
System.out.println(parts); // prints "[01234, 3456, 9abc, ij]"
String[] partsArray = parts.toArray(new String[0]);
Some key ideas:
Effective Java 2nd Edition, Item 25: Prefer lists to arrays
Works especially nicely if you don't know how many parts there'll be in advance
String API links
String substring(int beginIndex, int endIndex)
Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1.
Related questions
Fill array with List data
You do now that most of the java standard libraries are open source
In this case you can start here
Use String tokenizer to split strings in Java without split:
import java.util.StringTokenizer;
public class tt {
public static void main(String a[]){
String s = "012ab567ab0123ab";
String delims = "ab ";
StringTokenizer st = new StringTokenizer(s, delims);
System.out.println("No of Token = " + st.countTokens());
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
This is the right answer
import java.util.StringTokenizer;
public class tt {
public static void main(String a[]){
String s = "012ab567ab0123ab";
String delims = "ab ";
StringTokenizer st = new StringTokenizer(s, delims);
System.out.println("No of Token = " + st.countTokens());
while (st.hasMoreTokens())
{
System.out.println(st.nextToken());
}
}
}
/**
* My method split without javas split.
* Return array with words after mySplit from two texts;
* Uses trim.
*/
public class NoJavaSplit {
public static void main(String[] args) {
String text1 = "Some text for example ";
String text2 = " Second sentences ";
System.out.println(Arrays.toString(mySplit(text1, text2)));
}
private static String [] mySplit(String text1, String text2) {
text1 = text1.trim() + " " + text2.trim() + " ";
char n = ' ';
int massValue = 0;
for (int i = 0; i < text1.length(); i++) {
if (text1.charAt(i) == n) {
massValue++;
}
}
String[] splitArray = new String[massValue];
for (int i = 0; i < splitArray.length; ) {
for (int j = 0; j < text1.length(); j++) {
if (text1.charAt(j) == n) {
splitArray[i] = text1.substring(0, j);
text1 = text1.substring(j + 1, text1.length());
j = 0;
i++;
}
}
return splitArray;
}
return null;
}
}
you can try, the way i did `{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
for(int i = 0; i <str.length();i++) {
if(str.charAt(i)==' ') { // whenever it found space it'll create separate words from string
System.out.println();
continue;
}
System.out.print(str.charAt(i));
}
sc.close();
}`
The logic is: go through the whole string starting from first character and whenever you find a space copy the last part to a new string.. not that hard?
The way to go is to define the function you need first. In this case, it would probably be:
String[] split(String s, String separator)
The return type doesn't have to be an array. It can also be a list:
List<String> split(String s, String separator)
The code would then be roughly as follows:
start at the beginning
find the next occurence of the delimiter
the substring between the end of the previous delimiter and the start of the current delimiter is added to the result
continue with step 2 until you have reached the end of the string
There are many fine points that you need to consider:
What happens if the string starts or ends with the delimiter?
What if multiple delimiters appear next to each other?
What should be the result of splitting the empty string? (1 empty field or 0 fields)
You can do it using Java standard libraries.
Say the delimiter is : and
String s = "Harry:Potter"
int a = s.find(delimiter);
and then add
s.substring(start, a)
to a new String array.
Keep doing this till your start < string length
Should be enough I guess.
public class MySplit {
public static String[] mySplit(String text,String delemeter){
java.util.List<String> parts = new java.util.ArrayList<String>();
text+=delemeter;
for (int i = text.indexOf(delemeter), j=0; i != -1;) {
parts.add(text.substring(j,i));
j=i+delemeter.length();
i = text.indexOf(delemeter,j);
}
return parts.toArray(new String[0]);
}
public static void main(String[] args) {
String str="012ab567ab0123ab";
String delemeter="ab";
String result[]=mySplit(str,delemeter);
for(String s:result)
System.out.println(s);
}
}
public class WithoutSpit_method {
public static void main(String arg[])
{
char[]str;
String s="Computer_software_developer_gautam";
String s1[];
for(int i=0;i<s.length()-1;)
{
int lengh=s.indexOf("_",i);
if(lengh==-1)
{
lengh=s.length();
}
System.out.print(" "+s.substring(i,lengh));
i=lengh+1;
}
}
}
Result: Computer software developer gautam
Here is my way of doing with Scanner;
import java.util.Scanner;
public class spilt {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter the String to be Spilted : ");
String st = input.nextLine();
Scanner str = new Scanner(st);
while (str.hasNext())
{
System.out.println(str.next());
}
}
}
Hope it Helps!!!!!
public class StringWitoutPre {
public static void main(String[] args) {
String str = "md taufique reja";
int len = str.length();
char ch[] = str.toCharArray();
String tmp = " ";
boolean flag = false;
for (int i = 0; i < str.length(); i++) {
if (ch[i] != ' ') {
tmp = tmp + ch[i];
flag = false;
} else {
flag = true;
}
if (flag || i == len - 1) {
System.out.println(tmp);
tmp = " ";
}
}
}
}
In Java8 we can use Pattern and get the things done in more easy way. Here is the code.
package com.company;
import java.util.regex.Pattern;
public class umeshtest {
public static void main(String a[]) {
String ss = "I'm Testing and testing the new feature";
Pattern.compile(" ").splitAsStream(ss).forEach(s -> System.out.println(s));
}
}
static void splitString(String s, int index) {
char[] firstPart = new char[index];
char[] secondPart = new char[s.length() - index];
int j = 0;
for (int i = 0; i < s.length(); i++) {
if (i < index) {
firstPart[i] = s.charAt(i);
} else {
secondPart[j] = s.charAt(i);
if (j < s.length()-index) {
j++;
}
}
}
System.out.println(firstPart);
System.out.println(secondPart);
}
import java.util.Scanner;
public class Split {
static Scanner in = new Scanner(System.in);
static void printArray(String[] array){
for (int i = 0; i < array.length; i++) {
if(i!=array.length-1)
System.out.print(array[i]+",");
else
System.out.println(array[i]);
}
}
static String delimeterTrim(String str){
char ch = str.charAt(str.length()-1);
if(ch=='.'||ch=='!'||ch==';'){
str = str.substring(0,str.length()-1);
}
return str;
}
private static String [] mySplit(String text, char reg, boolean delimiterTrim) {
if(delimiterTrim){
text = delimeterTrim(text);
}
text = text.trim() + " ";
int massValue = 0;
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) == reg) {
massValue++;
}
}
String[] splitArray = new String[massValue];
for (int i = 0; i < splitArray.length; ) {
for (int j = 0; j < text.length(); j++) {
if (text.charAt(j) == reg) {
splitArray[i] = text.substring(0, j);
text = text.substring(j + 1, text.length());
j = 0;
i++;
}
}
return splitArray;
}
return null;
}
public static void main(String[] args) {
System.out.println("Enter the sentence :");
String text = in.nextLine();
//System.out.println("Enter the regex character :");
//char regex = in.next().charAt(0);
System.out.println("Do you want to trim the delimeter ?");
String delch = in.next();
boolean ch = false;
if(delch.equalsIgnoreCase("yes")){
ch = true;
}
System.out.println("Output String array is : ");
printArray(mySplit(text,' ',ch));
}
}
Split a string without using split()
static String[] splitAString(String abc, char splitWith){
char[] ch=abc.toCharArray();
String temp="";
int j=0,length=0,size=0;
for(int i=0;i<abc.length();i++){
if(splitWith==abc.charAt(i)){
size++;
}
}
String[] arr=new String[size+1];
for(int i=0;i<ch.length;i++){
if(length>j){
j++;
temp="";
}
if(splitWith==ch[i]){
length++;
}else{
temp +=Character.toString(ch[i]);
}
arr[j]=temp;
}
return arr;
}
public static void main(String[] args) {
String[] arr=splitAString("abc-efg-ijk", '-');
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
You cant split with out using split(). Your only other option is to get the strings char indexes and and get sub strings.