আমি স্ট্রিংস সমতা পরীক্ষার সাথে সম্পর্কিত একই সমস্যার মুখোমুখি হয়েছি, তুলনা করার স্ট্রিংগুলির একটিতে
ASCII অক্ষর কোড 128-255 রয়েছে ।
যেমন, অ-ব্রেকিং স্পেস - [হেক্স - এ0] স্পেস [হেক্স - 20]। এইচটিএমএলের মাধ্যমে নন-ব্রেকিং স্পেস দেখাতে। আমি নিম্নলিখিত ব্যবহার করেছি spacing entities
। তাদের চরিত্র এবং এর বাইটগুলি এর মতো&emsp is very wide space[ ]{-30, -128, -125}, &ensp is somewhat wide space[ ]{-30, -128, -126}, &thinsp is narrow space[ ]{32} , Non HTML Space {}
String s1 = "My Sample Space Data", s2 = "My Sample Space Data";
System.out.format("S1: %s\n", java.util.Arrays.toString(s1.getBytes()));
System.out.format("S2: %s\n", java.util.Arrays.toString(s2.getBytes()));
বাইটস আউটপুট:
এস 1: [77, 121, 32
83, 97, 109, 112, 108, 101 32
, 83, 112, 97, 99, 101 32
,, 68, 97, 116, 97]
এস 2: [77, 121 -30, -128, -125
,, 83, 97, 109, 112, 108, 101, -30, -128, -125
83, 112, 97, 99, 101 -30, -128, -125
, 68, 97, 116, 97]
বিভিন্ন স্পেস এবং তাদের বাইট-কোডগুলির জন্য নীচের কোডগুলি ব্যবহার করুন: wiki for List_of_Unicode_characters
String spacing_entities = "very wide space,narrow space,regular space,invisible separator";
System.out.println("Space String :"+ spacing_entities);
byte[] byteArray =
// spacing_entities.getBytes( Charset.forName("UTF-8") );
// Charset.forName("UTF-8").encode( s2 ).array();
{-30, -128, -125, 44, -30, -128, -126, 44, 32, 44, -62, -96};
System.out.println("Bytes:"+ Arrays.toString( byteArray ) );
try {
System.out.format("Bytes to String[%S] \n ", new String(byteArray, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Java জাভার জন্য ইউনিকোড স্ট্রিংয়ের এএসসিআইআই লিখিত লিপি। unidecode
String initials = Unidecode.decode( s2 );
➩ ব্যবহার Guava
: গুগল কোর Libraries for Java
।
String replaceFrom = CharMatcher.WHITESPACE.replaceFrom( s2, " " );
স্পেসের জন্য ইউআরএল এনকোডের জন্য পেয়ারা লাইব্রেরি ব্যবহার করুন।
String encodedString = UrlEscapers.urlFragmentEscaper().escape(inputString);
Some কারওর String.replaceAll()
সাথে ব্যবহৃত এই সমস্যাটি কাটিয়ে উঠতে RegularExpression
।
// \p{Z} or \p{Separator}: any kind of whitespace or invisible separator.
s2 = s2.replaceAll("\\p{Zs}", " ");
s2 = s2.replaceAll("[^\\p{ASCII}]", " ");
s2 = s2.replaceAll(" ", " ");
➩ ব্যবহার java.text.Normalizer.Form । এই এনাম ইউনিকোড স্ট্যান্ডার্ড এনেেক্স # 15 - ইউনিকোড নরমালাইজেশন ফর্ম এবং এগুলি অ্যাক্সেসের দুটি পদ্ধতিতে বর্ণিত চারটি ইউনিকোড নরমালাইজেশন ফর্মগুলির ধ্রুবক সরবরাহ করে।
s2 = Normalizer.normalize(s2, Normalizer.Form.NFKC);
স্ট্রিং এবং আউটপুটগুলির বিভিন্ন পদ্ধতির যেমন ➩ ইউনিিডকোড, নরমালাইজার, স্ট্রিংআপসগুলি পরীক্ষা করে ।
String strUni = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ Æ,Ø,Ð,ß";
// This is a funky String AE,O,D,ss
String initials = Unidecode.decode( strUni );
// Following Produce this o/p: Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ Æ,Ø,Ð,ß
String temp = Normalizer.normalize(strUni, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
temp = pattern.matcher(temp).replaceAll("");
String input = org.apache.commons.lang3.StringUtils.stripAccents( strUni );
Unidecode ব্যবহার করে best choice
, আমার চূড়ান্ত কোড নীচে প্রদর্শিত।
public static void main(String[] args) {
String s1 = "My Sample Space Data", s2 = "My Sample Space Data";
String initials = Unidecode.decode( s2 );
if( s1.equals(s2)) { //[ , ] %A0 - %2C - %20 « http://www.ascii-code.com/
System.out.println("Equal Unicode Strings");
} else if( s1.equals( initials ) ) {
System.out.println("Equal Non Unicode Strings");
} else {
System.out.println("Not Equal");
}
}