জাভা শনাক্তকারীগুলিতে "সংযুক্ত চরিত্রগুলি" কী কী?


208

আমি এসসিজেপির জন্য পড়ছি এবং এই লাইনটি সম্পর্কে আমার একটি প্রশ্ন রয়েছে:

শনাক্তকারীদের অবশ্যই একটি বর্ণ, মুদ্রা অক্ষর ($), বা সংযোগকারী অক্ষর যেমন আন্ডারস্কোর (_) দিয়ে শুরু করতে হবে। শনাক্তকারীরা কোনও সংখ্যা দিয়ে শুরু করতে পারে না!

এটিতে বলা হয়েছে যে একটি বৈধ শনাক্তকারী নাম আন্ডারস্কোরের মতো সংযোগকারী অক্ষর দিয়ে শুরু করতে পারে । আমি ভেবেছিলাম আন্ডারস্কোরগুলি একমাত্র বৈধ বিকল্প? এর সাথে আর কি সংযুক্ত চরিত্রগুলি রয়েছে?


2
"একটি মুদ্রার চরিত্র" সম্পর্কে: এই প্রশ্নের ইউকে দর্শনার্থীরা অবাক হয়ে জানতে এবং আগ্রহী হতে পারে যে "a" মুদ্রার চরিত্রের সাথে শুরু করতে সক্ষম হয়ে জাভা শনাক্তকারীরা আইনতভাবে পাউন্ড সিম্বল (£) দিয়ে শুরু করতে পারেন।
বিটজুঙ্কি

11
নোট করুন যে জাভা 8, _হ'ল "অবচয়" শনাক্তকারী। বিশেষত, সংকলক নিম্নলিখিত সতর্কতাটি প্রকাশ করে: (সনাক্তকারী হিসাবে '_' ব্যবহার জাভা এসই 8 এর পরে প্রকাশে সমর্থিত নাও হতে পারে)
আইয়ুব

4
@ আইওউ ইউপ ব্রায়ান গোয়েট বলেছেন যে তারা _ভবিষ্যতের ভাষার বৈশিষ্ট্যগুলিতে ব্যবহারের জন্য "পুনরায় দাবি আদায় করছে" । আন্ডারস্কোর দিয়ে শুরু হওয়া শনাক্তকারীরা এখনও ঠিক আছে, তবে ল্যাম্বডা প্যারামিটারের নাম হিসাবে ব্যবহার করা হলে এবং অন্য কোথাও একটি সতর্কতা হ'ল ত্রুটি is
বোয়ান

1
বাইটকোড জন্য, ক্রম দ্বারা কিছু থাকে না . ; [ / < > :যায়: stackoverflow.com/questions/26791204/... docs.oracle.com/javase/specs/jvms/se7/html/... অন্য সব কিছুর একটি জাভা শুধু এটুকু হয়।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

@ বনান মজার বিষয় হ'ল তারা ল্যাম্বডাসে এর ব্যবহারটিকে অস্বীকার করছেন, তবে সম্ভবত এটি "এই যুক্তি উপেক্ষা করুন" সনাক্তকারী হিসাবে ফিরে আসবে, যা ল্যাম্বডাসে ব্যবহৃত হবে। আমি কেবল এটির মতো এটি ব্যবহার করার চেষ্টা করেছি : _, _ -> doSomething();.
user31389

উত্তর:


268

সংযুক্ত চরিত্রগুলির একটি তালিকা এখানে। এই শব্দগুলি সংযোগ করতে ব্যবহৃত অক্ষর।

http://www.fileformat.info/info/unicode/category/Pc/list.htm

U+005F _ LOW LINE
U+203F  UNDERTIE
U+2040  CHARACTER TIE
U+2054  INVERTED UNDERTIE
U+FE33  PRESENTATION FORM FOR VERTICAL LOW LINE
U+FE34  PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
U+FE4D  DASHED LOW LINE
U+FE4E  CENTRELINE LOW LINE
U+FE4F  WAVY LOW LINE
U+FF3F _ FULLWIDTH LOW LINE

এটি জাভা 7 তে সংকলন করে।

int _, ‿, ⁀, ⁔, ︳, ︴, ﹍, ﹎, ﹏, _;

একটি উদাহরণ. এই ক্ষেত্রে tpএকটি কলামের নাম এবং প্রদত্ত সারির মান।

Column<Double> tp = table.getColumn("tp", double.class);

double tp = row.getDouble(︴tp︴);

পরবর্তী

for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++)
    if (Character.isJavaIdentifierStart(i) && !Character.isAlphabetic(i))
        System.out.print((char) i + " ");
}

কপি করে প্রিন্ট

$ _ ¢ £ ¤ ¥ ؋ ৳ ৳ ৻ ૱ ௹ ฿ ៛ ‿ ⁀ ₠ ₡ ₢ ₢ ₣ ₤ ₦ ₱ ₲ ₲ ₫ ₵ ₶ ₷ ₸ ﷼ ﹍ ﹍ ﹍ $ _ ¢ £ ¥ ₩


109
আমি সেই দিনের অপেক্ষায় রইলাম যখন আমি এই কোড সনাক্তকারীদের মতো কিছু কোড পেয়েছি!
মার্কো টপলনিক

58
@ মারকো টপলনিক আপনি যা চান তা সাবধান হন। ;)
পিটার ল্যারি

3
বিটিডাব্লু আপনি মুদ্রার চিহ্নগুলির যে কোনওটি ব্যবহার করতে পারেন। int ৲, ¤, ₪₪₪₪;: ডি
পিটার লরে

17
আমি এর মধ্যে একটি বা দুটি আমার কোডে ফেলে দিতে পারি, কেবল লাথি মারার জন্য! এবং বিল্ড সিস্টেমটি সত্যিই ইউটিএফ -8 অনুগত কিনা তা পরীক্ষা করা ।
মার্কো টপলনিক

82
@ গ্রাহামবারল্যান্ড কীভাবে if( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀) বা if ($ == $)বা if (¢ + ¢== ₡)বাif (B + ︳!= ฿)
পিটার ল্যারি

25

পুরো 65k চরগুলিতে পুনরাবৃত্তি করুন এবং জিজ্ঞাসা করুন Character.isJavaIdentifierStart(c)। উত্তরটি হ'ল "আন্ডারটি" দশমিক 8255


14
আমি (স্কালায়) প্রতিরোধ করতে পারিনি: (1 to 65535).map(_.toChar).filter(Character.isJavaIdentifierStart).size- 48529 অক্ষর পাওয়া যায় ...
টমাসজ নুরকিউইচ

65 কে এবং 12 কে এবং 8.5 কে ইত্যাদির কাছে কয়েকটি অক্ষর রয়েছে বলে মনে হয়
মার্কাস মিককোলাইনেন

আপনি যদি "! isLetter" এবং "! isDigit" বলে থাকেন তবে ফলন হয় না
মার্কাস মিককোলাইনেন

2546 + 2547
ন্যূনতম

3
মোট গণনা = 90648, তবে আমি যাচ্ছি Character.MAX_CODE_POINT, যা সম্ভবত এর চেয়ে বেশি 2<<16
মার্টিজন কোর্টেক্স

7

আইনী জাভা শনাক্তকারীর চূড়ান্ত স্পেসিফিকেশন জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে পাওয়া যাবে ।


3
আমি নিশ্চিত নই যে কোন অক্ষর জাভা শনাক্তকারী শুরু করতে পারে তার (অন্তর্নিহিত) প্রশ্নের উত্তরটি আসলে পুরোপুরি উত্তর দিয়েছে। নিম্নলিখিত লিঙ্কগুলির শেষে আমরা ক্যারেক্টার.আইসজেভাআইডিটিফায়ারস্টার্ট () এ শেষ করেছি যা উল্লেখ করে যে কোনও চরিত্র জাভা শনাক্তকারী শুরু করতে পারে যদি কেবল নিম্নলিখিত শর্তগুলির মধ্যে একটি সত্য হয়: ... সিএইচ একটি মুদ্রার প্রতীক ( যেমন "$"); ch একটি সংযোগকারী বিরামচিহ্ন চরিত্র ( যেমন "_")।
একটি সিভিএন

1
দেখে মনে হচ্ছে স্পেসিফিকেশনটি গ্রহণযোগ্য অক্ষরের চূড়ান্ত তালিকাটি বাস্তবায়ন পর্যন্ত ছেড়ে দেয়, তাই এটি সম্ভবত সবার জন্য আলাদা হতে পারে।
গ্রেগ হিউগিল

3
@ গ্রেগ হিউগিল এটিকে বোকা বানাবেন, বিবেচনা করে অন্য সমস্ত কিছু কীভাবে দৃly়ভাবে নির্দিষ্ট করা হয়েছে। আমি মনে করি যে এটি প্রকৃত ইউনিকোড চরিত্রের ক্লাস, যা ইউনিকোড স্ট্যান্ডার্ডে সংজ্ঞায়িত (কোথায় কোথায়?) is javaIdentifierStart () getType () উল্লেখ করে এবং মুদ্রা প্রতীক এবং সংযোজক বিরামচিহ্ন উভয় প্রকার যা সেই ফাংশন দ্বারা ফেরত পাওয়া যায়, সুতরাং তালিকাগুলি সেখানে দেওয়া যেতে পারে। "সাধারণ বিভাগ" আসলে ইউনিকোড স্ট্যান্ডার্ডের একটি নির্দিষ্ট শব্দ। সুতরাং বৈধ মান হবে L[সব], Nl, Sc, Pc
র্যান্ডম 832 20

3
@ গ্রেগ হিউগিল সঠিক স্পেসিফিকেশনটি সংক্ষিপ্ত এবং স্পষ্ট, এবং এটি ক্যারেক্টার.আইস জাভাআইডিটিফায়ার স্টার্ট () এবং ক্যারেক্টার.আইস জাভাআইডিটিফায়ার পার্ট () দ্বারা সংজ্ঞায়িত করা হয়েছে। শেষ। মূল বিষয়টি মনে রাখতে হবে যে ইউনিকোডটি বিকশিত হচ্ছে; চরিত্রের সেটগুলি সমাপ্ত হিসাবে ভাবার ফাঁদে পড়বেন না (ল্যাটিন একটি ভয়ানক উদাহরণ; এটিকে উপেক্ষা করুন)। চরিত্রগুলি সর্বদা তৈরি হয়। আপনার জাপানি বন্ধুদের জিজ্ঞাসা করুন। আইনী জাভা শনাক্তকারীরা সময়ের সাথে পরিবর্তিত হতে পারে - এবং এটি উদ্দেশ্যমূলক। মুল বক্তব্যটি হ'ল মানুষের ভাষায় কোড লিখতে দেওয়া। এটি পরিবর্তনের অনুমতি দেওয়ার জন্য কঠোর প্রয়োজনের দিকে নিয়ে যায়।
জেমস মুর

6

এখানে ইউনিকোডে সংযোগকারী চরিত্রগুলির একটি তালিকা রয়েছে। আপনি তাদের আপনার কীবোর্ডে পাবেন না।

U + এ 005F কম লাইন: _
U + এ 203F UNDERTIE ‿
U + এ 2040 চরিত্র টাই ⁀
U + এ 2054 ইনভার্টেড UNDERTIE ⁔
U + এ FE33 উপস্থাপনের ফর্ম জন্য উল্লম্ব কম লাইন: _ U
+ এ FE34 উপস্থাপনের ফর্ম জন্য উল্লম্ব তরঙ্গায়িত কম লাইন ︴
U + এ FE4D ড্যাশ কম লাইন ﹍
U + এ FE4E CENTRELINE কম লাইন ﹎
U + এ FE4F তরঙ্গায়িত কম লাইন ﹏
U + এ FF3F পূর্ণচওড়া কম লাইন: _


5
আপনি কি কীবোর্ড লেআউটটি ব্যবহার করছেন তা আমি জানি না, তবে আমি অবশ্যই _ (U + 005F) খুব সহজেই টাইপ করতে পারি :)
বিডনলান

4

একটি সংযোগকারী চরিত্র দুটি অক্ষর সংযোগ করতে ব্যবহৃত হয়।

জাভা, একটি সংযোগ চরিত্র এক যা হয় Character.getType (int- কোডপয়েন্ট) / Character.getType (গৃহস্থালির কাজ CH) মান সমান ফেরৎ Character.CONNECTOR_PUNCTUATION

লক্ষ্য করুন জাভা, চরিত্র তথ্য ইউনিকোড মান যা শনাক্ত তাদের সাধারণ বিভাগ পিসি, যার জন্য উপনাম হল বরাদ্দ করে অক্ষর সংযোগ উপর ভিত্তি করে তৈরি Connector_Punctuation

নিম্নলিখিত কোড স্নিপেট,

for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++) {
    if (Character.getType(i) == Character.CONNECTOR_PUNCTUATION
            && Character.isJavaIdentifierStart(i)) {
        System.out.println("character: " + String.valueOf(Character.toChars(i))
                + ", codepoint: " + i + ", hexcode: " + Integer.toHexString(i));
    }
}

সংযোগকারী অক্ষরগুলি মুদ্রণ করে যা jdk1.6.0_45 এ একটি সনাক্তকারী শুরু করতে ব্যবহার করা যেতে পারে

character: _, codepoint: 95, hexcode: 5f
character: ‿, codepoint: 8255, hexcode: 203f
character: ⁀, codepoint: 8256, hexcode: 2040
character: ⁔, codepoint: 8276, hexcode: 2054
character: ・, codepoint: 12539, hexcode: 30fb
character: ︳, codepoint: 65075, hexcode: fe33
character: ︴, codepoint: 65076, hexcode: fe34
character: ﹍, codepoint: 65101, hexcode: fe4d
character: ﹎, codepoint: 65102, hexcode: fe4e
character: ﹏, codepoint: 65103, hexcode: fe4f
character: _, codepoint: 65343, hexcode: ff3f
character: ・, codepoint: 65381, hexcode: ff65

Jdk1.6.0_45 এ নিম্নলিখিত সংকলন,

int _, ‿, ⁀, ⁔, ・, ︳, ︴, ﹍, ﹎, ﹏, _,  = 0;

স্পষ্টতই, উপরোক্ত ঘোষণাটি নিম্নলিখিত দুটি সংযোগকারী অক্ষরের (পিছনে সামঞ্জস্য ... ওফস !!!) জন্য jdk1.7.0_80 এবং jdk1.8.0_51 তে সংকলন করতে ব্যর্থ হয়েছে,

character: ・, codepoint: 12539, hexcode: 30fb
character: ・, codepoint: 65381, hexcode: ff65

যাইহোক, বিশদ বিবরণ একপাশে, পরীক্ষা শুধুমাত্র বেসিক ল্যাটিন চরিত্র সেট উপর দৃষ্টি নিবদ্ধ করে

এছাড়াও, জাভাতে আইনী শনাক্তকারীদের জন্য, এখানে বর্ণিত সরবরাহ সরবরাহ করা হয়েছে । আরও বিশদ পেতে ক্যারেক্টার ক্লাসের API গুলি ব্যবহার করুন।


1

জাভা শনাক্তকারীদের (তবে শুরুতে নয়) মঞ্জুরিপ্রাপ্ত সর্বাধিক, ভাল, মজাদার একটি চরিত্র হ'ল "জিরো প্রস্থ নন জোয়ারার" (& zwnj ;, ইউ + 200 সি, https://en.wikedia.org / উইকি / জিরো-প্রস্থ_নোন-সংযোজক )।

এক্সটিএমএলের একটি টুকরোতে আমি এটি একবারে একটি এক্সট্রিবিউটের মানটির ভিতরে রেখেছিলাম that এক্সএমএলের অন্য অংশে একটি রেফারেন্স ধারণ করে। জেডডব্লিউএনজে "শূন্য প্রস্থ" হওয়ায় এটি দেখা যায় না (কার্সার ধরে হাঁটার সময় বাদে, এটি ঠিক আগে চরিত্রের উপর প্রদর্শিত হয়)। এটি লগফিল এবং / অথবা কনসোল আউটপুটটিতেও দেখা যায়নি। তবে এটি সর্বক্ষণ ছিল: অনুসন্ধান ক্ষেত্রগুলিতে অনুলিপি করুন এবং পেস্ট করুন এবং এটি রেফারেন্সযুক্ত অবস্থানটি খুঁজে পেল না। (ক্ষেত্রের দৃশ্যমান অংশ) স্ট্রিংটি অনুসন্ধানের ক্ষেত্রে টাইপ করলে উল্লেখ করা অবস্থানটি পাওয়া গেল। এটি বের করার জন্য আমাকে কিছুক্ষণ সময় নিয়েছে।

ইউরোপীয় কীবোর্ড লেআউটটি ব্যবহার করার সময় একটি জিরো-প্রস্থ-নন-জয়েনার টাইপ করা আসলে বেশ সহজ (খুব সহজ), যদিও কমপক্ষে জার্মান ভেরিয়েন্টে যেমন, "ইউরোপাস্তাত্তুর 2.02" - এটি আলটগ্র ++ দিয়ে পৌঁছনীয় is ", দুটি কী দুর্ভাগ্যক্রমে বেশিরভাগ কীবোর্ডে একে অপরের পাশে অবস্থিত এবং দুর্ঘটনাক্রমে সহজেই একসাথে আঘাত হানা যায়।

জাভাতে ফিরে: আমি ভালভাবে ভেবেছিলাম, আপনি কিছু কোড লিখতে পারেন:

void foo() {
    int i = 1;
    int i = 2;
}

দ্বিতীয়টি আমি শূন্য-প্রস্থ-অ-যোগদানকারী দ্বারা সংযুক্ত (স্ট্যাকওভারফ্লো এর সম্পাদকের উপরের কোডটিতে স্নিপড করতে পারি না), তবে এটি কার্যকর হয়নি। ইন্টেলিজ (১.3.৩.৩) অভিযোগ করেনি, তবে জাভা (জাভা ৮) একটি ইতিমধ্যে সংজ্ঞায়িত শনাক্তকারী সম্পর্কে অভিযোগ করেছে - মনে হয় জাভ্যাক আসলে জডাব্লুএনজে চরিত্রটিকে সনাক্তকারী হিসাবে অংশ হিসাবে অনুমতি দেয়, তবে এটি কী করে তা প্রতিবিম্বটি ব্যবহার করার সময়, ZWNJ চরিত্রটি শনাক্তকারী থেকে ছিনিয়ে নেওয়া হয় - এমন কিছু যা অক্ষরের মতো নয় like


0

অক্ষর আপনি ব্যবহার করতে পারেন একটি তালিকা ভিতরে (বরং শুরুতে চেয়ে) আপনার শনাক্তকারী হয় অনেক বেশি মজা:

for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++)
    if (Character.isJavaIdentifierPart(i) && !Character.isAlphabetic(i))
        System.out.print((char) i + " ");

তালিকাটি হ'ল:

I wanted to post the output, but it's forbidden by the SO spam filter. That's how fun it is!

এটিতে বেশিরভাগ নিয়ন্ত্রণের অক্ষর অন্তর্ভুক্ত রয়েছে! মানে বেল আর ছি ছি! আপনি আপনার উত্স কোডটি এফএন বেলটি রিং করতে পারেন! অথবা এমন অক্ষর ব্যবহার করুন যা কেবল কখনও কখনও প্রদর্শিত হবে যেমন নরম হাইফেনের মতো।


এতে DEL u007f, ডেল অক্ষর অন্তর্ভুক্ত রয়েছে। :-(
টড ও'ব্রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.