次のような構造体配列またはリスト文字列があります。
{ "A.B", "B.A", "A.C", "C.A" }
そして、リストから逆文字列を削除したいだけです:
{ "A.B", "A.C" }
タイプ文字列の使用方法と逆文字列の削除方法は?
これをチェックして
public static void main(String arg[]){
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
List<String> strList = new ArrayList<String>();
strList.add("A.B");
strList.add("B.A");
strList.add("A.C");
strList.add("C.A");
Iterator<String> itr = strList.iterator();
while(itr.hasNext()){
String [] split = itr.next().toUpperCase().split("\\.");
if(str.indexOf(split[0])>str.indexOf(split[1])){
itr.remove();
}
}
System.out.println(strList);
}
出力は
[A.B, A.C]
文字列を反転するには、StringBuffer を使用することをお勧めします。
String sample = "ABC";
String reversed_sample = new StringBuffer(sample).reverse().toString();
ArrayList からオブジェクトを削除するには、remove メソッドを使用します。
String sample = "ABC";String to_remove = "ADS";
ArrayList<String> list = new ArrayList<Sample>();
list.add(to_remove);list.add(sample );
list.remove(to_remove);
これは時間内に非常に簡単に行うことができますO(n^2)
。疑似コード:
For every element1 in the list:
For every element2 in the list after element1:
if reverse(element2).equals(element1)
list.remove(element2)
あなたの人生を楽にし、 ConcurrentModificationException を防ぐためにIterator
. Java で反復子を適切に使用する方法を学習するための良い例であるため、コードは示しません。
逆の方法:
public String reverse(String toReverse) {
return new StringBuilder(toReverse).reverse().toString();
}
編集:別の逆の方法:
public String reverse(String toReverse) {
if (toReverse != null && !toReverse.isEmpty) {
String[] elems = toReverse.split(".");
}
StringBuilder reversedString = new StringBuilder("");
for (int i = elems.length - 1; i >= 0; i++) {
reversedString.append(elems[i]);
reversedString.append(".");
}
return reversedString.toString();
}
Set<String>
リスト内の要素を維持しながら、リストを反復できます。
あなたがそれをしている間 - 新しいリストを作成し(これが出力になります)、そして:
if (!set.contains(current.reverse())) {
outputList.append(current)
set.add(current)
}
この解はO(n*|S|)
平均的なもので、n
は要素数、|S|
は文字列の平均長です。
Java コード:
private static String reverse(String s) {
StringBuilder sb = new StringBuilder();
for (int i = s.length()-1 ; i >=0 ; i--) {
sb.append(s.charAt(i));
}
return sb.toString();
}
private static List<String> removeReverses(List<String> arr) {
Set<String> set = new HashSet<String>();
List<String> res = new ArrayList<String>();
for (String s : arr) {
if (!set.contains(reverse(s))) {
res.add(s);
set.add(s);
}
}
return res;
}
public static void main(String[]args){
String[] arr = { "a.c" , "b.c", "c.a", "c.b" };
System.out.println(removeReverses(arr));
}
が得られます:
[a.c, b.c]
HashMap
a を使用して、文字列がリスト内の他の文字列の反転バージョンであるかどうかを判断できます。また、特定の文字列を逆にするためのユーティリティ関数も必要になります。このスニペットを見てください:
String[] input = { "A.B", "B.A", "A.C", "C.A" };
HashMap<String, String> map = new HashMap<String, String>();
String[] output = new String[input.length];
int index = 0;
for (int i = 0; i < input.length; i++) {
if (!map.containsKey(input[i])) {
map.put(reverse(input[i]), "default");
output[index++] = input[i];
}
}
サンプルの String-reversing メソッドは次のようになります。
public static String reverse(String str) {
String output = "";
int size = str.length();
for (int i = size - 1; i >= 0; i--)
output += str.charAt(i) + "";
return output;
}
出力:
出力配列にはこれらの要素が含まれます =>[A.B, A.C, null, null]
コードは千の言葉に値する.....
public class Tes {
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
arr.add("A.B");
arr.add("B.A");
arr.add("A.C");
arr.add("C.A");
System.out.println(arr);
for (int i = 0; i < arr.size(); i++) {
StringBuilder str = new StringBuilder(arr.get(i));
String revStr = str.reverse().toString();
if (arr.contains(revStr)) {
arr.remove(i);
}
}
System.out.println(arr);
}
}