ورود

View Full Version : جدا سازی کلمات فارسی و انگلیسی



iamnewbie
یک شنبه 08 فروردین 1389, 20:00 عصر
سلام دوستان
من می خوام برنامه ای بنویسم که در یک جمله کلمات فارسی را از انگلیسی جدا کند و آنها را چاپ کند

اگر جمله زیر رو فرض بگیریم :

"سلام به همه دوستان barname نویس این site خوب"

من می خوام به صورت زیر چاپ بشه :

سلام به همه دوستان
barname
نویس این
site
خوب

لطفا کمکم کنید با مثال اگر امکان داره

Ehsan rashydy
یک شنبه 08 فروردین 1389, 20:10 عصر
منظورتون اینه که همه ی کلمه ها رو از هم جدا کنه و تو خط جدید بنویسه؟

شما میتونید این کار و کنید:
رشته ی ورودی رو از کاربر بگیرید، تو یه string ذخیره کنید.
بعد تو این string به جای فضای خالی(space) از کاراکتر خط جدید( n\ ) استفاده کنید.
یعنی هر جا فضای خالی دارید، به جاش خط جدید استفاده کنید.

iamnewbie
یک شنبه 08 فروردین 1389, 20:36 عصر
نه منظورم این نبود .کاملا تو مثال مشخصه که چی می خوام
فارسی رو چاپ کنه هرچقد که می خواد باشه برای انگلیسی هم همینطور هر چند کلمه که بین فارسی محصور شده در یک خط

jlover
دوشنبه 09 فروردین 1389, 03:57 صبح
سلام دوستان
من می خوام برنامه ای بنویسم که در یک جمله کلمات فارسی را از انگلیسی جدا کند و آنها را چاپ کند

اگر جمله زیر رو فرض بگیریم :

"سلام به همه دوستان barname نویس این site خوب"

من می خوام به صورت زیر چاپ بشه :

سلام به همه دوستان
barname
نویس این
site
خوب

لطفا کمکم کنید با مثال اگر امکان داره

خب اگه همیشه به شکل مثالی که استفاده کردید باشه ، یعنی کلمه ای نداشته باشیم که شامل مخلوطی از حروف انگلیسی و فارسی باشه ( مsalaن ) خیلی ساده ست !
کلاس StringTokenizer برای همین منظور ساخته شده :


/**
* a class splits a string to collection of latin and Farsi(Arabic) words
* @author Esmaeil Ashrafi
*/
import java.util.StringTokenizer;

public class F_L_Splitter {

static boolean isLatin(String word) {
char ch = word.charAt(0); // check one of its character for L2R direction,no matter whom
if( Character.getDirectionality(ch) == Character.DIRECTIONALITY_LEFT_TO_RIGHT )
return true;
return false;
}

public static void main(String args[]) {
String str = "سلام به همه دوستان barname نویس این site خوب";
StringTokenizer strTokens = new StringTokenizer(str);
while (strTokens.hasMoreTokens()) {
String token = strTokens.nextToken();
if (isLatin(token)) {
System.out.println();
do {
System.out.print(token + " ");
token = strTokens.nextToken();
} while (isLatin(token));
System.out.println();
}//end of if
System.out.print(token + " ");
}//end of tokens
}//end of main
}//end of F_L_Splitter



منظورتون اینه که همه ی کلمه ها رو از هم جدا کنه و تو خط جدید بنویسه؟
شما میتونید این کار و کنید:
رشته ی ورودی رو از کاربر بگیرید، تو یه string ذخیره کنید.
بعد تو این string به جای فضای خالی(space) از کاراکتر خط جدید( n\ ) استفاده کنید.
یعنی هر جا فضای خالی دارید، به جاش خط جدید استفاده کنید.

به شما پیشنهاد میکنم سری به کلاس StringTokenizer بزنید !
-------------------------------
اگه سوالی هست در خدمتم

iamnewbie
دوشنبه 09 فروردین 1389, 12:31 عصر
سلام دوست عزیز
از جواب سریع و دقیق شما کمال تشکر رو دارم!
فقط یک سوال دیگه دارم از خدمتتون.آیا این کلاس مثل آرایه عمل می کنه؟یکی همه کلمات رو یکهو می بره تو حافظه یا آرایه بعد پردازش می کنه یا اینکه از اول می خونه و می ره جلو و حافظه اشغال نمی کنه؟

iamnewbie
دوشنبه 09 فروردین 1389, 13:54 عصر
آقا این مشکل من باز حل نشد:ناراحت:
اگر بخوام همینو جوری تغییر بدم که به جای اینکه وقتی رسید به یه کلمه تا جایی که به کلمه ای از نوع زبان بعدی رسید همه رو جمع کنه تو یه متغیر string و بعد در نهایت چاپ کنه چکار کنم؟من می خوام اول همه از یک نوع رو جمع کنه بعد چاپ کنه.از vector هم نمی خوام استفاده شه چون برای متنهای طولانی استفاده می کنم و حافظه کم می آرم.آیا راهی هست؟باز هم تشکر

iamnewbie
دوشنبه 09 فروردین 1389, 20:29 عصر
آقا ما گیر کردیم مثل.... در .....
مددی

jlover
سه شنبه 10 فروردین 1389, 19:52 عصر
سلام دوست عزیز
از جواب سریع و دقیق شما کمال تشکر رو دارم!
فقط یک سوال دیگه دارم از خدمتتون.آیا این کلاس مثل آرایه عمل می کنه؟یکی همه کلمات رو یکهو می بره تو حافظه یا آرایه بعد پردازش می کنه یا اینکه از اول می خونه و می ره جلو و حافظه اشغال نمی کنه؟

مطمئن نیستم،اما فکر میکنم از همون متغیری که به سازنده ش میفرسته استفاده میکنه و نه اینکه رشته ی جدیدی ایجاد کنه،میتونید مستندات و در صورت لزوم کدهای منبع این کلاس رو مطالعه کنید.


آقا این مشکل من باز حل نشد:ناراحت:
اگر بخوام همینو جوری تغییر بدم که به جای اینکه وقتی رسید به یه کلمه تا جایی که به کلمه ای از نوع زبان بعدی رسید همه رو جمع کنه تو یه متغیر string و بعد در نهایت چاپ کنه چکار کنم؟من می خوام اول همه از یک نوع رو جمع کنه بعد چاپ کنه.از vector هم نمی خوام استفاده شه چون برای متنهای طولانی استفاده می کنم و حافظه کم می آرم.آیا راهی هست؟باز هم تشکر

خب همه شو جمع کنید بعدن چاپ کنید یا هر کاری که خاستید باهاشون بکنید !
دو تا متغیر از کلاس StringBuffer اعلان کنید و بجای دو خط دستور چاپ بیاید از متد append کلاس StringBuffer استفاده کنید و کلمات اتگلیسی رو به یکی و فارسی رو به اون یکی متغیر بچسبونید.

iamnewbie
چهارشنبه 11 فروردین 1389, 23:19 عصر
دوست عزیز مشکلم از راه string buffer هم به علت کمبود حافظه روی موبایل حل نمی شد که از راه دیگه ای حلش کردم ولی معرفی کلاس StringTokenizer در حل اولیه مشکل بسیار کارساز بود.از شما متشکرم:)

jlover
پنج شنبه 12 فروردین 1389, 01:14 صبح
دوست عزیز مشکلم از راه string buffer هم به علت کمبود حافظه روی موبایل حل نمی شد که از راه دیگه ای حلش کردم ولی معرفی کلاس StringTokenizer در حل اولیه مشکل بسیار کارساز بود.از شما متشکرم:)

خیلی مشتاقم لطف بفرمایید بگید از چه کلاسی استفاده کردید ؟

فکر میکنم استفاده از خود کلاس String حتمن تا حد زیادی میزان حافظه ی مصرفی رو بهبود میده اما احتمالن به همون موازات زمان محاسبه رو بالا میبره !

iamnewbie
پنج شنبه 12 فروردین 1389, 02:26 صبح
خب البته من توضیح زیادی راجع به مشکلم ندادم.من احتیاج داشتم تا یک گره از جملات پشت سرهم از یک زبان که بین دو گره از زبان دیگه محصور شده رو دربیارم.حالا گره می خواد یک کلمه باشه یا چندتا فقط هرچی پشت سرهم و بدون انقطاع اومده بشه یک گره.مثل


سلام من newbie hastam va خوشحالم

newbie hastam va بشه یک گره و "سلام من" و "خوشحالم" هم هرکدوم یک گره

من با کلاس stringtokenizer گره سازی رو انجام دادم و بعد هر گره رو تو آرایه ای از رشته ریختم و هرکدوم رو روش کنترل انجام دادم