চরিত্রটি যদি একটি চিঠি থাকে তবে কলটি Character.isLetter(c)
ফিরে আসে true
। তবে কী কী দ্রুত String
এএসসিআইআইয়ের বেস অক্ষরগুলি অন্তর্ভুক্ত রয়েছে তা খুঁজে পাওয়ার কোনও উপায় আছে ?
চরিত্রটি যদি একটি চিঠি থাকে তবে কলটি Character.isLetter(c)
ফিরে আসে true
। তবে কী কী দ্রুত String
এএসসিআইআইয়ের বেস অক্ষরগুলি অন্তর্ভুক্ত রয়েছে তা খুঁজে পাওয়ার কোনও উপায় আছে ?
উত্তর:
19.0 এর পর থেকে পেয়ারা আপনি ব্যবহার করতে পারেন:
boolean isAscii = CharMatcher.ascii().matchesAllOf(someString);
এটি সেই matchesAllOf(someString)
পদ্ধতিটি ব্যবহার করে যা ascii()
এখন অবহেলিত ASCII
সিঙ্গলটনের পরিবর্তে কারখানার পদ্ধতির উপর নির্ভর করে ।
এখানে হওয়া ASCII সব ASCII অক্ষর অন্তর্ভুক্ত সহ মুদ্রণযোগ্য নয় এমন অক্ষরের চেয়ে কম 0x20
(স্থান) যেমন ট্যাব, লাইন-ফিড / রিটার্ন যেমন বরং BEL
কোড সহ 0x07
এবং DEL
কোড দিয়ে 0x7F
।
পূর্ববর্তী সংস্করণগুলির মন্তব্যে কোড পয়েন্টগুলি নির্দেশিত থাকলেও এই কোডটি কোড পয়েন্টের পরিবর্তে ভুলভাবে অক্ষর ব্যবহার করে। ভাগ্যক্রমে, এর U+010000
চেয়ে বেশি মূল্যের সাথে কোড পয়েন্ট তৈরি করতে প্রয়োজনীয় অক্ষরগুলি ASCII সীমার বাইরে মান সহ দুটি সরোগেট অক্ষর ব্যবহার করে। সুতরাং পদ্ধতিটি এখনও ASCII, এমনকি ইমোজিযুক্ত স্ট্রিংগুলির জন্য পরীক্ষায় সফল হয়।
ascii()
পদ্ধতিটি ছাড়াই পূর্বের পেয়ারা সংস্করণগুলির জন্য আপনি লিখতে পারেন:
boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);
CharMatcher.ASCII
এখন
আপনি এটি java.nio.charset.Charset দিয়ে করতে পারেন ।
import java.nio.charset.Charset;
public class StringUtils {
public static boolean isPureAscii(String v) {
return Charset.forName("US-ASCII").newEncoder().canEncode(v);
// or "ISO-8859-1" for ISO Latin 1
// or StandardCharsets.US_ASCII with JDK1.7+
}
public static void main (String args[])
throws Exception {
String test = "Réal";
System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));
test = "Real";
System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));
/*
* output :
* Réal isPureAscii() : false
* Real isPureAscii() : true
*/
}
}
StandardCharsets.US_ASCII
পরিবর্তে ব্যবহার করতে পারবেন Charset.forName("US-ASCII")
।
StandardCharsets
? আমি অন্য উত্তর পোস্ট করতে পারে তবে আমি বরং এটি অত্যন্ত প্রশংসিত উত্তর ঠিক করতে চাই
এখানে একটি অন্য উপায় যা লাইব্রেরির উপর নির্ভর করে নয় তবে একটি রেজেেক্স ব্যবহার করছে।
আপনি এই একক লাইনটি ব্যবহার করতে পারেন:
text.matches("\\A\\p{ASCII}*\\z")
পুরো উদাহরণ প্রোগ্রাম:
public class Main {
public static void main(String[] args) {
char nonAscii = 0x00FF;
String asciiText = "Hello";
String nonAsciiText = "Buy: " + nonAscii;
System.out.println(asciiText.matches("\\A\\p{ASCII}*\\z"));
System.out.println(nonAsciiText.matches("\\A\\p{ASCII}*\\z"));
}
}
\P{Print}
এবং \P{Graph}
+ একটি বর্ণনাকে অন্তর্ভুক্ত করি তবে আপনি কি আপত্তি করেন ? আপনার দরকার কেন \A
এবং \z
?
স্ট্রিংয়ের মাধ্যমে পরিদর্শন করুন এবং নিশ্চিত করুন যে সমস্ত অক্ষরের 128 এরও কম মান রয়েছে।
জাভা স্ট্রিংগুলি ইউটিএফ -16 হিসাবে ধারণামূলকভাবে এনকোড করা হয়েছে। ইউটিএফ -16 এ, ASCII অক্ষর সেট মান 0 - 127 হিসাবে এনকোড করা হয়েছে এবং কোনও নন ASCII অক্ষরের জন্য এনকোডিং (যা একাধিক জাভা চর নিয়ে গঠিত হতে পারে) 0 - 127 নম্বর অন্তর্ভুক্ত না করার গ্যারান্টিযুক্ত
str.chars().allMatch(c -> c < 128)
c >= 0x20 && c < 0x7F
হিসাবে 7 বিট এনকোডিং প্রথম 32 মান নিয়ন্ত্রণ অক্ষর এবং চূড়ান্ত মান (0x7F) হয় DEL
।
অথবা আপনি আইডিএন ক্লাস থেকে কোডটি অনুলিপি করুন ।
// to check if a string only contains US-ASCII code point
//
private static boolean isAllASCII(String input) {
boolean isASCII = true;
for (int i = 0; i < input.length(); i++) {
int c = input.charAt(i);
if (c > 0x7F) {
isASCII = false;
break;
}
}
return isASCII;
}
return false
পরিবর্তে ব্যবহার করার isASCII = false
এবং break
।
অ্যাপাচি থেকে কমন্স-ল্যাং 3 এ সমস্ত ধরণের 'সমস্যার' জন্য মূল্যবান ইউটিলিটি / সুবিধার পদ্ধতি রয়েছে one
System.out.println(StringUtils.isAsciiPrintable("!@£$%^&!@£$%^"));
এটা চেষ্টা কর:
for (char c: string.toCharArray()){
if (((int)c)>127){
return false;
}
}
return true;
স্ট্রিংটি দিয়ে ইটারেট করুন এবং চরটি পেতে CharAt () ব্যবহার করুন। তারপরে এটি একটি আন্ত হিসাবে বিবেচনা করুন এবং দেখুন এটির কোনও ইউনিকোড মান (ASCII এর একটি সুপারসেট) রয়েছে কিনা তা দেখুন।
আপনি পছন্দ না প্রথম বিরতি।
private static boolean isASCII(String s)
{
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) > 127)
return false;
return true;
}
charAt
ফেরত a char
। কোনও প্রকার char
প্রথমে কোন ইনট, রূপান্তরিত না করে কোনও প্রকারের চেয়ে বড় হলে আপনি সরাসরি পরীক্ষা করতে পারেন বা আপনার পরীক্ষাটি স্বয়ংক্রিয়ভাবে কভারসিয়েনটি করে? হতে পারে আপনি এবং সম্ভবত এটি পারে? আমি এগিয়ে যান এবং তাই মত কোন int- এ এই রূপান্তরিত: if ((int)s.charAt(i) > 127)
। আমার ফলাফলগুলি কিছু আলাদা কিনা তা নিশ্চিত নই তবে এটিকে চালিয়ে দেওয়া সম্পর্কে আমি ভাল বোধ করি। আমরা দেখতে পাব: - \
এটা সম্ভব ছিল। খুব সমস্যা।
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
public class EncodingTest {
static CharsetEncoder asciiEncoder = Charset.forName("US-ASCII")
.newEncoder();
public static void main(String[] args) {
String testStr = "¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~KITEC 3/F Rotunda 2";
String[] strArr = testStr.split("~~", 2);
int count = 0;
boolean encodeFlag = false;
do {
encodeFlag = asciiEncoderTest(strArr[count]);
System.out.println(encodeFlag);
count++;
} while (count < strArr.length);
}
public static boolean asciiEncoderTest(String test) {
boolean encodeFlag = false;
try {
encodeFlag = asciiEncoder.canEncode(new String(test
.getBytes("ISO8859_1"), "BIG5"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return encodeFlag;
}
}
স্ট্রিংয়ের মধ্যে কেবলমাত্র ASCII অক্ষর রয়েছে এবং এটি না থাকলে এটি সত্য হবে
Charset.forName("US-ASCII").newEncoder().canEncode(str)
আপনি যদি এএসসিআইআই ছাড়াই অপসারণ করতে চান তবে স্নিপেটটি এখানে:
if(!Charset.forName("US-ASCII").newEncoder().canEncode(str)) {
str = str.replaceAll("[^\\p{ASCII}]", "");
}
//return is uppercase or lowercase
public boolean isASCIILetter(char c) {
return (c > 64 && c < 91) || (c > 96 && c < 123);
}