我有一个java类,它涉及一个String数组和两个for循环
用于遍历数组元素并在
中打印它们的冗余数组,因为它们是字符串。
我希望有人帮我打印每个元素(字符串),只有它一次
在数组中重复。
以下代码多次在数组中打印一些元素。
所以需要比较数组元素
public class myClassName {
static String [] myArray = {"Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud","Valderama","Khaled"};
public static String [] getArray()
{
String str[] = new String[myArray.length];
for(int i=0;i<myArray.length;i++)
{
str[i] = myArray[i].toString();
}
return str;
}
public static void main( String [] args)
{
String d [] = getArray();
int noOftimesRepeated;
for(int i=0;i<getArray().length;i++)
{
noOftimesRepeated=1;
String currentName = d[i];
for(int j=0;j<getArray().length;j++)
{
if(i!=j && d[i].equalsIgnoreCase(d[j]))
{
noOftimesRepeated = noOftimesRepeated+1;
}
}
int j =0;
System.out.println(d[i]+"\t" +"\t"+noOftimesRepeated);
}
}
}
请不要使用.util。* package
我有第二次试用,但它打印出一个元素和它的冗余
只。
public class Javafool {
static String [] myArray = {"Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud","Valderama","Khalo","Valderama"};
static String str2[] = new String[myArray.length];
public static String [] getArray()
{
String str[] = new String[myArray.length];
for(int i=0;i<myArray.length;i++)
{
str[i] = myArray[i].toString();
}
return str;
}
public static void main(String[] args) {
String d [] = getArray();
int noOftimesRepeated;
sort(myArray);
int no_of_repeat=1;
String temp =null;
int i ;
for( i = 0;i<myArray.length-1;i++)
{
temp = myArray[i];
myArray[i] = myArray[i+1];
myArray[i+1] = temp;
if(myArray[i].equals(temp))
{
no_of_repeat= ++no_of_repeat;
}
}
System.out.println(myArray[i]+""+temp+"\t"+"\t\t"+no_of_repeat);
}
public static void sort(String [] array) {
String temp = null;
for(int j=0;j<array.length;j++)
{
for(int i = 0; i<array.length-1;i++)
{
if(array[i].compareTo(array[i+1])<0)
{
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}}}}
答案 0 :(得分:3)
将字符串添加到Set<String>
,消除重复值,然后打印它们:
List<String> list = Arrays.asList("Khaled", "Valderama",...);
Set<String> set = new LinkedHashSet<String>(list);
for(String s : set)
System.out.println(s);
答案 1 :(得分:2)
使用Map<String, Integer>
,String表示输入字符串,Integer表示noOftimesRepeated
计数器。
示例:
Map<String , Integer> map = new HashMap<String , Integer>();
// Add and count str Repeated times.
map.put(str, map.get(str) + 1);
// output string and counter pair in map
System.out.println(map);
答案 2 :(得分:1)
如果您绝对不想使用 java.util ,您仍然可以手动排序并删除相邻的重复项:
public static void main(String[] args) {
String [] myArray = {"Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud","Valderama","Khaled"};
sort(myArray);
String last=null;
for(int i = 0;i<myArray.length;i++) {
if(last==null || !myArray[i].equals(last)) {
last = myArray[i];
System.out.print(last+", ");
}
}
}
/*
* Very naive method to sort elements. You can improve this with a merge sort.
* Arrays.sort() would do the same job in a better way.
*/
public static void sort(String [] array) {
String temp = null;
for(int j=0;j<array.length;j++) {
for(int i = 0; i<array.length-1;i++) {
if(array[i].compareTo(array[i+1])<0) {
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
}
答案 3 :(得分:0)
public static void main(String[] args) {
List<String> myArray = Arrays.asList("Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud","Valderama","Khaled");
Set<String> sets = new HashSet<String>();
sets.addAll(myArray);
System.out.println(sets);
}
输出:[Khaled, Valderama, Rasheed, Daoud]
答案 4 :(得分:0)
您可以执行以下操作,
String[] myArray = { "Khaled", "Valderama", "Daoud", "Khaled",
"Rasheed", "Daoud", "Valderama", "Khaled" };
Set<String> sets = new HashSet<String>(Arrays.asList(myArray));
System.out.println(Arrays.toString(sets.toArray()));
答案 5 :(得分:0)
您可以使用set
。 Set
将避免添加重复项。
String [] myArray = {"Khaled","Valderama","Daoud",
"Khaled","Rasheed","Daoud","Valderama","Khaled"};
Set<String> set=new HashSet<>();
for(String i:myArray){
set.add(i);
}
System.out.println(set);
如果您不想使用java.util.*
包,请尝试以下方式。
String [] myArray = {"Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud",
"Valderama","Khaled"};
String[] newArr=new String[myArray.length];
int j=0;
for(String i:myArray){
if(!Arrays.toString(newArr).contains(i)){
newArr[j]=i;
j++;
}
}
答案 6 :(得分:0)
除了使用 Set ,您还可以创建一个唯一项目列表。
String [] myArray = {"Khaled", "Valderama", "Daoud", "Khaled", "Rasheed", "Daoud", "Valderama", "Khaled"};
List<String> myPrintList = new ArrayList<String>();
for(String str : myArray){
if(!myPrintList.contains(str)){ // Check first if myPrintList contains the item already
myPrintList.add(str); // Add if the list doesn't contain that item
}
}
// Print list
for(String str : myPrintList){
System.out.println(str);
}
编辑基于评论:
不确定为什么你不想使用util包,但是 -
String [] myArray = {"Khaled", "Valderama", "Daoud", "Khaled", "Rasheed", "Daoud", "Valderama", "Khaled"};
StringBuilder uniqueNames = new StringBuilder(); // For storing all unique names separated by a pipe (|)
for(String str : myArray){
if(uniqueNames.indexOf(str) < 0){ // Check if str exists in builder yet
uniqueNames.append(str); // Add str if it doesn't exist
uniqueNames.append("|"); // Add delimiter
}
}
String[] myPrintArray = uniqueNames.toString().split("\\|"); // Get an array by splitting using the pipe delimiter
for(String str : myPrintArray){
System.out.println(str);
}
答案 7 :(得分:0)
你需要2个循环才能完成它。只需这3行代码即可! :d
final List<String> lst = Arrays.asList("Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud","Valderama","Khaled");
final Set<String> set = new HashSet<String>(lst);
System.out.printf("Unique values: ", set);
如果没有* ulit包
您需要一种自定义排序方法。 伪代码可以这样(不是一种有效的方式)
"Given" lst array;
Array temp = new Araay(lst.lenght);
//two for loop for
(int i = 0; i< lst.lenght; i++) {
if(i==0){
temp[i] = lst[i]; // first array
}
for (int u = 0 ; u < lst.lenght; u ++){
//Write a code here if the lst[i] string is not equal to any temp[u] string, add then inside. Else dun care :) Cheers!
}
}
答案 8 :(得分:0)
试试这个。对于重复的项目,for循环不会完全运行
import java.util.ArrayList;
public class myClassName {
static String [] myArray = {"Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud","Valderama","Khaled"};
public static String [] getArray()
{
String str[] = new String[myArray.length];
for(int i=0;i<myArray.length;i++)
{
str[i] = myArray[i].toString();
}
return str;
}
public static void main( String [] args)
{
String d [] = getArray();
int noOftimesRepeated;
ArrayList<String> list = new ArrayList<String>();
for(int i=0;i<getArray().length;i++)
{
if(list.contains(d[i]))
continue;
noOftimesRepeated=1;
for(int j=0;j<getArray().length;j++)
{
if(i!=j && d[i].equalsIgnoreCase(d[j]) )
{
noOftimesRepeated = noOftimesRepeated+1;
list.add(d[i]);
}
}
System.out.println(d[i]+"\t" +"\t"+noOftimesRepeated);
}
}
}
答案 9 :(得分:0)
我同意以前的人,首先你应该按顺序让你成为arraylist,你可以尝试Quicksort算法,其次你应该将当前元素与前一个元素进行比较,如果它们相等,就不要打印它。这很容易,对吧?
您可以将快速排序算法函数提取到util类,以便在以后的开发中使用它。
答案 10 :(得分:0)
我找到了解决方案,(以下解决方案不涉及java.util
包,它取决于Quicksort算法)。
谢谢大家。
public class Javafool
{
static String [] myArray = {"Khaled","Valderama","Daoud","Khaled","Rasheed","Daoud","Valderama","Khalo","Valderama","Daoud"};
static String str2[] = new String[myArray.length];
public static void main(String[] args)
{
int [] noOftimesRepeated;
sort(myArray);
int no_of_repeat=1;
String temp =null;
int i ;
int count = 0;
String previous = null;
for (String s : myArray)
{
if (s.equals(previous))
{
count++;
}
else
{
if( previous !=null)
System.out.println(previous + " :" + count);
previous = s;
count = 1;
}
}
if (myArray.length > 0)
{
System.out.println(previous + " :" + count);
}
}
public static void sort(String [] array) {
String temp = null;
for(int j=0;j<array.length;j++)
{
for(int i = 0; i<array.length-1;i++)
{
if(array[i].compareTo(array[i+1])<0)
{
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
} } }
答案 11 :(得分:0)
问题在于数组在内存中的大小是固定的,您不能从数组中删除重复的值。
因此,您可以将重复的值转换为不需要的值(例如零或任何字符串),或者使用ArrayList
,它允许您从列表中删除值(因为列表大小不是固定的,并且您可以更改它。)