با استفاده از StringBuilder.Remove در سیشارپ تابعی بنویسید که از یک رشتهی حاوی کد منبع تمام کامنتهای تکخطی (// تا پایان خط) و چندخطی (/* ... */) را حذف کند و رشتهی پاکشده را برگرداند.
10.0 بازدید آخرین ویرایش در 199 روز قبل ساعت 19:39 0.0
برای کار از System.Text.StringBuilder استفاده کنید تا تغییرات روی متن سریع باشد: متن را در یک StringBuilder قرار دهید، سپس در حلقهای به دنبال الگوهای "//" و "/*" با کمک IndexOf روی رشته (یا با تبدیل موقت به رشته با ToString()) بگردید، موقعیت انتهای کامنت را تعیین کنید (تا اولین '\n' برای تکخطی یا تا "*/" برای چندخطی) و با StringBuilder.Remove بازهٔ مربوطه را حذف کنید؛ این کار را تا وقتی که دیگر کامنتی یافت نشد تکرار کنید. نکات: بعد از هر حذف مجدداً اندیسها را بازخوانی کنید، برای حالتهایی که پایان "*/" یافت نمیشود تا انتهای متن حذف کنید، و توجه کنید که حذف کامنتها در پردازشهای کامپایلر/مفسر یا پاکسازی ورودی در وب یا بازیسازی کاربرد دارد.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
روش پیشنهادی با StringBuilder.Remove سریع و مناسب است، اما به خاطر داشته باشید که باید الگوهای // و /* را تنها زمانی حذف کنید که داخل رشتهها یا کاراکترها نباشند چون رشتههای متنی ممکن است الگوهای شبیه کامنت داشته باشند. بعد از هر حذف حتماً اندیسها را بازخوانی کنید و برای کامنتهای تکخطی ترجیحاً خودِ '\n' را نگه دارید یا جایگزین کنید تا شماره خطوط حفظ شود، و اگر پایان "*/" یافت نشد کل تا انتهای متن را حذف کنید. همچنین برای سازگاری با CRLF و بهبود پایداری میتوانید پیادهسازی را به صورت ماشین حالتدار ساده درآورید تا همگیٔ حالتهای مرزی به درستی مدیریت شوند.
گزارش