Solocid
Solocid

Reputation: 53

Finding specific value inside an Array (not List)

I am learning about arrays and I did quiet a few experiments, most of them went well, however now I'm stuck. What I want to archive is, find if an specific value (String, int or whatever), exists inside an Array and if it does, use that value for something i.e the code below which I basically count how many times that value was present inside the array:

package arraysOnly;
import java.util.*;
public class ArrayContainsString
{
    public static void main(String[]args)
        {       
            Scanner sc = new Scanner(System.in);
            int arraySize = 0;
            int wordCount = 0;

            System.out.println("How many words are you gonna type?: ");
            arraySize = sc.nextInt();

            String[] words = new String[arraySize];     // Simple array, the size of which will be decided from the user-input

            for(int count = 0; count < arraySize; count++)
            {
                System.out.println("Enter your " + (count+1) + ": ");
                words[count] = sc.next();
            }

            //Basically this is the part I'm having troubles
             if(in_array("ubt", $words)
            {
                 wordCount++;
            }
        }
}

I know about this,

if(Arrays.asList(words).contains("ubt"));

which basically converts the array into an List / ArrayList or whatever, however I want to treat this as an array only if possible.

Upvotes: 1

Views: 70

Answers (3)

Suresh Atta
Suresh Atta

Reputation: 121998

You can just iterate over array

for (String str : array){
  if(str.equals("ubt")){    
   wordCount++;
 }    
}

Edit:

It's just equivalent to a normal for loop

for(int i=0; i<array.length; i++) {
    if(array[i].equals("ubt")){    
       wordCount++;
     } 
} 

Upvotes: 1

eric.m
eric.m

Reputation: 1612

The simple solution

public static boolean contains(String toFind, String[] strings) {
    for (String str : strings) {
        if (str.equals(toFind)) return true;
    }
    return false;
}

EDIT: To increase it after the user inputs a word, use this in the loop:

System.out.println("Enter your " + (count+1) + ": ");
words[count] = sc.next();
if (words[count].equals("ubt")) wordCount++;

Upvotes: 2

Bohemian
Bohemian

Reputation: 425033

An array is the wrong data structure; a Set is the weapon of choice:

Set<String> words = new HashSet<>()
for (int count = 0; count < arraySize; count++) {
    System.out.println("Enter your " + (count+1) + ": ");
    words.add(sc.next());
}

if (words.contains("ubt"))
    wordCount++;
}

The contains() method of a HashSet completes in constant time not matter how large the set is. Although performance is irrelevant for small input sizes like this usage, it's good to get in the habit of choosing the right tools for the job. It also makes your code cleaner.

Generally speaking, don't use arrays unless you absolutely have to; they are only rarely used in commercial code.

Upvotes: 2

Related Questions