یک برنامه جاوا بنویسید که یک رشته ورودی را گرفته، تمام کاراکترهای غیرحروف و اعداد را با یک فاصله جایگزین کند، فاصله‌های متوالی را به یک فاصله تبدیل کند و در نهایت رشته‌ی پاک‌شده را با استفاده از StringBuilder معکوس برگرداند.

16.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:44

0.0

برای حل این مسئله از متدهای replaceAll و الگوهای منظم (regex) استفاده کنید؛ مثلاً replaceAll("[^\\p{L}\\p{N}]+", " ") برای جایگزینی هر چیزی جز حروف و اعداد با یک فاصله، سپس با replaceAll("\\s+", " ") و trim() فاصله‌های اضافی را حذف کنید. در مرحلهٔ آخر از StringBuilder (یا در صورت نیاز به ایمنی رشته‌ای از StringBuffer) برای قرار دادن رشتهٔ پاک‌شده و استفاده از متد reverse() بهره ببرید. نکته‌ها: برای کار با حروف یونیکد از \\p{L} و \\p{N} استفاده کنید و StringBuilder را برای عملکرد بهتر در محیط تک‌ریسمانی ترجیح دهید.

توسط پژوهشگر در 201 روز قبل ساعت 03:44
دسته بندی ها: Java Java for beginner
arman در 201 روز قبل ساعت 05:25

استفاده از replaceAll با الگوهای یونیکد مانند [^\\p{L}\\p{N}]+ برای جایگزینی کاراکترهای غیرحرف و غیرعدد و سپس \\s+ برای حذف فاصله‌های اضافی و استفاده از trim() رویکردی ساده و قابل فهم است. در جاوا باید بک‌سلاش‌ها را در رشتهٔ سورس به درستی escape کنید (مثلاً \\p{L} و \\p{N}). اگر بخواهیم معکوس‌سازی با StringBuilder را به طور کامل ایمن نگه داریم، reverse() بر پایهٔ واحدهای UTF-16 عمل می‌کند و ممکن است کاراکترهای خارج از BMP را که به صورت surrogate pairs هستند، از هم بپاشد؛ برای حفظ کامل کاراکترها باید از بازنویسی با کدپوینت‌ها استفاده کنیم. در نهایت این ترکیب برای ورودی‌های طولانی مناسب است و نتیجه را با trim() و reverse() برمی‌گردانید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری