[英]Comparing character in two Strings
I want to check if the characters in each String are the same, and can I build a second String which is given from the characters from first String.我想检查每个字符串中的字符是否相同,是否可以构建第二个字符串,该字符串是从第一个字符串中的字符给出的。 For example I have Random String ="amksomsamk" and i have to compare it to another "askommmaks".
例如,我有随机字符串 =“amksomsamk”,我必须将它与另一个“askommaks”进行比较。
Firstly I write metod which check length首先我写了检查长度的方法
public boolean areEquals(String s1, String s2){
if (s1.toCharArray().length == s2.toCharArray().length){
return true;
}else
return false;
and now I want to check each character in posible easy way.现在我想以可能的简单方式检查每个字符。 I will be grateful for your help
我会很感激你的帮助
PS.附注。 For given example I want to get true in return because characters in this particular Strings are the same.
对于给定的示例,我希望返回 true,因为此特定字符串中的字符是相同的。 amksomsamk a:2 m:3 k:2 s:2 o:1 askommmaks a:2 m:3 k:2 s:2 o:1 If i use equals it won't be working
amksomsamk a:2 m:3 k:2 s:2 o:1 askommmaks a:2 m:3 k:2 s:2 o:1 如果我使用 equals 它将无法工作
Convert each String
to char[]
将每个
String
转换为char[]
char[] str1 = s1.toCharArray();
char[] str2 = s2.toCharArray();
Sort each char[]
对每个
char[]
排序char[]
Arrays.sort(str1);
Arrays.sort(str2);
Check if equal检查是否相等
return Arrays.equals(str1, str2);
You can compare it just using below function:您可以使用以下函数进行比较:
public boolean isEqual(String s1, String s2) {
if (s1.length() != s2.length())
return false;
Map<Character, Integer> charsCountMap = getCharsByCount(s1);
for (char c : s2.toCharArray()) {
if (charsCountMap.get(c) == null)
return false;
charsCountMap.put(c, charsCountMap.get(c) - 1);
}
return charsCountMap.values().stream()
.allMatch(count -> count == 0);
}
private Map<Character, Integer> getCharsByCount(String s) {
Map<Character, Integer> charsCountMap = new HashMap<>(s.length());
for (char c : s.toCharArray())
charsCountMap.put(c, charsCountMap.getOrDefault(c, 0) + 1);
return charsCountMap;
}
Using recursion with StringBuilder strings gives a terse solution, though it's not easy to understand the code:对 StringBuilder 字符串使用递归提供了一个简洁的解决方案,尽管代码不容易理解:
public static void main(String[] args) {
String s1 = "☆★👌\u4e16\u754c\u4f60d👉bbbZZ❸💋";
String s2 = "Zb☆b\u754cb★👌👉\u4e16d❸\u4f60Z💋";
boolean matched = (s1.length() != s2.length()) ? false : compareStrings(new StringBuilder(s1), new StringBuilder(s2));
System.out.println("Same chars for '" + s1 + "' and '" + s2 + "'? " + matched);
}
private static boolean compareStrings(StringBuilder sb1, StringBuilder sb2) {
if (sb1.length() == 0) {
return true;
}
int ind = sb2.indexOf((String) sb1.subSequence(0, 1));
return ind == -1 ? false : compareStrings(sb1.deleteCharAt(0), sb2.deleteCharAt(ind));
}
This is the output:这是输出:
Same chars for '☆★👌世界你d👉bbbZZ❸💋' and 'Zb☆b界b★👌👉世d❸你Z💋'?
'☆★👌世界你d👉bbbZZ❸💋'和'Zb☆b界b★👌👉世d❸你Z💋'的字符相同吗? true
真的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.