Intersection of a string

Is there any method to do intersection on String. Say I have a string:
str = car, apple, car, pencil, orange, apple, cup, coffee

I would like to loop through that string and then retrive only the intersected values. so the result would be:
result = car, apple

Can I do this?? Any idea please.
Thanks!!!
JuunoAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

CEHJCommented:
That wouldn't be an intersection, that would simply be repeated values
0
CEHJCommented:
Try something like the following:
        List<String> values = Arrays.asList("car, apple, car, pencil, orange, apple, cup, coffee".split("\\s*,\\s*"));
        Stack<String> s = new Stack<String>();
        Set<String> dups = new HashSet<String>();
        Collections.sort(values);
        s.push("");
        for (String value : values) {
            if (value.equals(s.peek())) {
                dups.add(value);
            }
            else {
                s.push(value);
            }
        }
        System.out.println(dups);

Open in new window

0
Mick BarryJava DeveloperCommented:
String str = "car,apple,car,pencil,orange,apple,cup,coffee";
Set unique = new HashSet(Arrays.asList(str.split(",")));
0
Rowby Goren Makes an Impact on Screen and Online

Learn about longtime user Rowby Goren and his great contributions to the site. We explore his method for posing questions that are likely to yield a solution, and take a look at how his career transformed from a Hollywood writer to a website entrepreneur.

JuunoAuthor Commented:
@ objects - thanks. but I want to get repeated values, not to reduce duplicate values. I think my title makes u confuse. Thanks anyway.

@ CEHJ, is there anyway I can also get the values of how many times they are repeated ?

Thanks!!
0
CEHJCommented:
>>@ CEHJ, is there anyway I can also get the values of how many times they are repeated ?

You can keep a Map and increment the count into it, keyed on the value
0
JuunoAuthor Commented:
ur code is like: if u find an equal string, then put that value into 'dups', right? so, I tried to change like this:

But it printed out like this: {car=1, apple=1}
String test = "car, apple, car, pencil, orange, apple, cup, coffee";
	       List<String> values = Arrays.asList(test.split("\\s*,\\s*"));
	        Stack<String> s = new Stack<String>();
	        Map<String, Integer> dups = new HashMap<String, Integer>();
	        Collections.sort(values);
	        s.push("");
	        int ctn=0;
	        for (String value : values) {
	            if (value.equals(s.peek())) {
	            	if(dups.get(value) == null) {
				        dups.put(value, new Integer(1));
				    } else {
				    	dups.put(value, new Integer(dups.get(value).intValue() + 1));
				    }
				    }
	            else {
	                s.push(value);
	            }
	        }
	        System.out.println(dups);
	}

Open in new window

0
JuunoAuthor Commented:
I got it:
I should change the value '1' to '2' in this line:
> dups.put(value, new Integer(1)
> dups.put(value, new Integer(2).

Thanks anyway!!

0
CEHJCommented:
You first of all need to get the count out of the Map if the key exists, and increment it. If the key doesn't exist, you put a count of 1
0
Mick BarryJava DeveloperCommented:
> @ objects - thanks. but I want to get repeated values, not to reduce duplicate values.

yes saw that. you just need to remove the unique values from the original list.
you will be left with the values that are diped

let me know if you need the code, should only be a couple of lines, you don't need a loop
0
ozlevanonCommented:
You can also achieve that using Collections.frequency method (not that most efficient code, but shorter).
See snippet below.
String str = "car, apple, car, pencil, orange, apple, cup, coffee";
List<String> list = new ArrayList<String>(Arrays.asList(str.split("\\s*,\\s*")));
Set<String> duplicates = new HashSet<String>();
for (String s : list)
{
	if (Collections.frequency(list, s) > 1)
	{
		duplicates.add(s);
	}
}
System.out.println("duplicates = " + duplicates);

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.