مشکلی پیش آمد! این مقاله به عنوان یک تکلیف آزمایشی برای یک موقعیت در تیم JavaRush نوشته شده است. و به صورت یک سخنرانی تمام عیار نوشته شده است. با توجه به این موضوع، کیفیت و کمیت دانش مفید انباشته شده در این پست را برای شما تضمین می کنم. علاوه بر اطلاعات عملی و تئوری، این مقاله حاوی حقایق جالبی است که ممکن است حتی از آنها ندانید!
سلام دنیا!
فرار شخصیت یک راه حل فنی بسیار جالب و ضروری است. نیاز به فرار از شخصیت نقش مهمی در تاریخ کل صنعت برنامه نویسی داشته است. در این مقاله درباره چیستی کاراکتر escaping، چرایی نیاز به فرار از آنها و نحوه پیاده سازی کاراکتر escape در جاوا صحبت خواهیم کرد. در این مقاله مثال ها و حقایق جالبی در رابطه با موضوع فرار از شخصیت ارائه خواهد شد. از خواندن لذت ببرید! تمام اطلاعات در یک سیستم کامپیوتری به صورت متن نمایش داده می شود که در سطح پایین تر با بایت نمایش داده می شود. وقتی نامه یا پیامی می نویسیم، متنی را تایپ می کنیم که برای شخص قابل درک باشد. وقتی کدی را در IDE می نویسیم، متنی را تایپ می کنیم که کامپایلر بتواند آن را تجزیه کند. در جاوا، متن را می توان به عنوان نوعی نشان داد
String
که داده های آن با کاراکترهای کنترلی - نقل قول های جفتی نشان داده می شود.
String str = "Hello World!";
با متن "سلام دنیا!" هیچ مشکلی پیش نمی آید، اما اگر همان متن نیاز به برجسته شدن در گفتار مستقیم داشته باشد، چه؟ با استفاده از قوانین دستور زبان، مشخص می شود که متن "Hello World!"، علاوه بر کاراکترهای کنترل از نوع
String
، باید در نقل قول های گفتاری مستقیم قرار گیرد.
String str = "Java said, "Hello World!"";
این گزینه کار نخواهد کرد، زیرا کامپایلر به سادگی متوجه نمی شود که مقداردهی اولیه متغیر در چه نقطه ای به پایان می رسد
str
.
برای حل این مشکل و مشکلات مشابه، برای فرار از کاراکترها ، یعنی تغییر
کاراکترهای کنترلی به دنبالههای کنترلی که به
دنبالههای فرار نیز شناخته میشوند، اختراع شد . در زیر لیستی از توالی های فرار جاوا معتبر برای استفاده در رشته ها آمده است.
\t
- کاراکتر Tab (در جاوا - معادل چهار فاصله)؛
\b
- یک کاراکتر بازگشتی در متن یک قدم به عقب یا حذف یک کاراکتر در یک خط (backspace).
\n
- نماد خط جدید؛
\r
- نماد بازگشت کالسکه؛
\f
- صفحه را به ابتدای صفحه بعدی پرش کنید.
\'
- کاراکتر نقل قول تک؛
\"
- کاراکتر نقل قول دوگانه؛
\\
- کاراکتر بک اسلش (
\
). حال بیایید گفتار مستقیم را در عبارت خود برجسته کنیم تا کامپایلر بتواند به راحتی آنچه نوشته شده را تجزیه کند.
String str = "Java said, \"Hello World!\"";
بنابراین، اگر محتوای متغیر
str
روی صفحه نمایش داده شود، متن نوشته شده هم برای کامپایلر و هم برای شخص قابل درک است. ما فهمیدیم فرار شخصیت چیست و چرا به آن نیاز است. و حتی از شخصیت نقل قول مضاعف فرار کردند! بیایید به تجزیه دنباله های فرار باقی مانده ادامه دهیم.
کاراکتر تب در یک خط با یک دنباله فرار نشان داده می شود
\t
و مشابه چهار فاصله است. اما اگر طول رشته ای متشکل از چهار فاصله برابر با طول چهار کاراکتر باشد، طول رشته ای با کاراکتر تب برابر با یک خواهد بود. کاراکتر تب اغلب برای ساخت جداول یا عناصر واسط
شبه گرافیکی استفاده می شود، زیرا ... این راحت تر از نوشتن چهار فاصله است. در زیر نمونه ای از یک رابط شبه گرافیکی آورده شده است.
در میان تمام دنبالههای فرار، نماد
\b
شاید جالبترین باشد، زیرا به ما امکان میدهد آخرین کاراکتر در خط خروجی را حذف کنیم، شبیه به زمانی که آن را با فشار دادن کلید
backspace پاک کنیم .
System.out.print("2 + 2 = 5");
System.out.print("\b");
System.out.print("4");
نمادها تاریخچه مشترکی
\n
دارند
\r
- بیایید با هم به آنها نگاه کنیم.
\n
ممکن است قبلاً با کاراکتر خط شکست مواجه شده باشید. به عنوان مثال، اگر یک متد
println()
اطلاعات را به گونهای خروجی دهد که خروجی بعدی روی یک خط جدید باشد، متد
print()
پس از خروجی، خطی را انجام نمیدهد، اما اگر یک کاراکتر به انتهای خروجی اضافه کنید
\n
، یک خط شکسته میشود. انجام خواهد شد.
System.out.print("Next output will be on a new line\n");
System.out.println("Next output will be on a new line");
کاراکتر carriage return
\r
به ما امکان می دهد مکان نما را به ابتدای خط خروجی برگردانیم و اطلاعات جدید را طوری نمایش دهیم که گویی قبلاً چیزی در آن خط وجود نداشته است.
System.out.print("Text to be rewritten.");
System.out.print('\r');
System.out.print("New text.");
در واقع بازگشت کالسکه به روزهایی برمی گردد که متن روی ماشین تحریر چاپ می شد. برای انجام تغذیه خط، لازم بود کالسکه را حرکت داده و اهرم (بخشی از مکانیزم ماشین تحریر) را پایین بیاورید و پس از آن تغذیه خط انجام شود. اگر اهرم پایین نیامد، می توان به چاپ روی همان خط ادامه داد. این همان چیزی است که هنگام نمایش نماد مشاهده می کنیم
\r
. در همین راستا، زمانی که برنامه نویس می خواست خط شکسته را انجام دهد، از روی عادت، دنباله ای از کاراکترها را در انتهای خروجی اجرا می کرد
\r\n
. با پایان یافتن دوران ماشین تحریر، نسلی از برنامه نویسان بودند که هنوز از این توالی استفاده می کردند، اگرچه خودشان هرگز در ماشین تحریر کار نکرده بودند. آنها اغلب فراموش می کردند که به چه ترتیبی باید یک دنباله معین را تکمیل کنند -
\r\n
یا
\n\r
. سپس یک کلمه آزمایشی به کمک آنها آمد
return
که ترتیب نمایش این نمادها به وضوح قابل مشاهده بود. با این حال، بعدها، هنگام توسعه نرم افزار برای اولین نسخه های ویندوز، پس از MS-DOS، برنامه نویسان مجبور به استفاده از دنباله شدند
\r\n
. اکنون لازم نیست نگران این موضوع باشید و فقط از شخصیت برای شکستن یک خط استفاده کنید
\n
.
بیایید دوباره به گذشته برگردیم، در حدود دهه 80. پس از آن بود که نماد صفحه به جلو
\f
تا ابتدای صفحه بعد رایج شد. در آن زمان چاپگرهای خطی بزرگی وجود داشت که برای کار با آنها باید کد برنامه ای را نوشت که حاوی چه چیزی و چگونه چاپگر باید چاپ کند. و برای نشان دادن اینکه متن باید از صفحه جدید شروع شود، از علامت استفاده شد
\f
. در زمان ما ، این نماد مدتهاست که ارتباط خود را از دست داده است و بعید است که هرگز با آن روبرو شوید. ابعاد چاپگر خطی بسیار چشمگیر است.
با نمادها
\’
و
\\
همه چیز دقیقاً مانند فرار از نقل قول دوگانه است، یک مثال در ابتدای مقاله وجود داشت. شما باید از یک نقل قول فرار کنید، برای مثال، برای مقداردهی اولیه نوع char با یک نقل قول.
char ch = '\'';
از کاراکتر بک اسلش فرار کنید تا نشان دهید که کاراکتر زیر بخشی از دنباله فرار نخواهد بود.
System.out.println("\\n - line break escape sequence");
در عمل، هنگام کار با مسیرها، اغلب باید از بک اسلش فرار کنید:
System.out.println("It's Java string: \"C:\\Program Files\\Java\\jdk1.7.0\\bin\"");
تاکید کردم که این دنباله های فرار در رشته ها (لفظ رشته ها) استفاده می شود، زیرا بقیه آنها برای توصیف عبارات منظم کلاس استفاده می شوند
Pattern
و به موضوع این مقاله مرتبط نیستند.
در اینجا میتوانید فهرستی از تمام دنبالههای فرار کلاس را ببینید
Pattern
. با این حال، شایان ذکر است که عبارات منظم به شکلی که در حال حاضر وجود دارند را نمی توان بدون استفاده از دنباله های فرار تصور کرد، نه تنها در جاوا، بلکه در سایر زبان های برنامه نویسی محبوب، به عنوان مثال، PHP. در جاوا، کاراکتر escaping در قالب بندی رشته ها نیز استفاده می شود. به عنوان مثال، هنگام تعیین یک قالب رشته برای نمایش نماد درصد، باید نماد درصد - را کپی کنید
%%
، در غیر این صورت با خطا مواجه می شویم و IDE از شما می خواهد که درصد را اضافه کنید.
System.out.printf("Milk fat percentage : %d%%", 10);
این مقاله را به پایان می رساند. امیدوارم در مورد فرار از شخصیت و نحوه عملی کردن آن چیزهای زیادی یاد گرفته باشید. فرار از کاراکتر در بسیاری از زبان های برنامه نویسی ذاتی است. در جاوا، مانند سایر زبان های مشابه C، این فناوری تقریباً یکسان پیاده سازی می شود. بنابراین، دانشی که از این مقاله به دست می آورید ممکن است نه تنها در جاوا مفید باشد. با تشکر از توجه شما و آرزوی موفقیت در تحصیل!
GO TO FULL VERSION