بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

به چه طریق می توان به یک کاراکتر فارسی یک عدد نسبت داد ?

مدیریت گفتگو
developer1981 11 سال پیش
آخرین تغییر: 11 سال پیش

به عنوان مثال می خواهم به تمام حروف الفبای فارسی عدد نسبت بدهم

مثلا به حرف ب عدد 10 به حرف پ عدد 43 به حرف د عدد 100 و غیره . وقتی این حروف رو به عنوان کاراکتر معرفی مکنم یعنی داده ای از نوع char به نظر میرسه که قبول نمیکنه . 

هدف من در کل جدا سازی حروف از کلمات و تبدیل تک تک حروف به عددی هست که از قبل نسبت داده شده .

مثلا کلمه سیب را که کاربر تایپ کرده گرفته و  با فرض اینکه از قبل حروف مقادیر عددی گرفته اند (مثلا 30 برابر س و 20 برابر ی و 261 برابر ب باشد  ) به من مقادیر عددی کلمه تایپ شده را بدهد. یک کلمه را از edit text گرفته و در متغیری مقدار عددی آن را نشان دهد مثلا  حاصل جمع آن کلمه را.         

نظرات

پاسخ‌ها 4

Hossein Kurd 11 سال پیش

همه رو طبق ترتیبی که می خواهی بریز توی یک آرایه بعد کاراکتر مورد نظر رو پیدا کن و اندیس رو + 1 نمایش بده( اندیس آرایه از 0 شروع می شه )

یا Array List از نوع object تعریف کن ، حالا این object چیه؟ :

public MyItem{

public char mChar;
public int mNumber;

}

و ArrayList :

ArrayList<MyItem> myList = new ArrayList<MyItem>();

for (int i = 0 ; i<32; i++){

MyItem item = new Item(); item.mChar = 'ب';
item.mNumber = 1;

myList.add(item);
Log.i("LOG" , "Array Size : " + myList.size() + " , char : " + item.mChar + " , numer : " + item.mNumber);

}


خیلی روی نوشتن get set های MyItem حساس نبودم چون نخواستم شلوغ بشه و نتیجه دادن مهم بود

نظرات

developer1981 11 سال پیش

حسین جان ممنون از توضیحاتت ولی من قصد ندارم به ترتیب عدد اختصاص بدم می خوام بتونم به هر حرف یه عدد خاص که در طول برنامه ثابت است اختصاص بدم . مثلا به "ن" عدد 50 اختصاص بدم و تو کل برنامه ثابت باشه. یا مثلا به "ظ" عدد 800. بعد بتونم بر اساس حروفی که گرفته میشه از کاربر عدد متناظرش رو به من بده 

نظرات

Hossein Kurd 11 سال پیش
خب روش دوم رو انجام بده
developer1981 11 سال پیش
میشه واسه یک کاراکتر یه مثال بزنی مثلا به کاراکتر "ی" عدد 10 رو تخصیص بده که برای بقیه هم همین کار و بسط بدم
developer1981 11 سال پیش
از بچه ها کسی نظر دیگه ای نداره ؟ لطفا راهنمایی کنید ممنون
Hossein Kurd 11 سال پیش
اول شما همه رو توی آرایه به صورت دستی ادد می کنی سپس هر جا که خواستی استفاده می کنی
تا اونجايي كه من ميدونم تو برنامه نويسي حالا به هر زباني، هر حرف يا كاراكتري يه كد اسكي معادل خودش رو داره ( كه يك عدد هست) كه استاندارد هم هست. و مسلما جاوا دستوري داره كه كد اسكي يك حرف رو برگردونه منتهي من هنوز توي جاوا مسلط نيستم كه كدش رو بگم. چرا از كد اسكي معادل هر كاراكتر استفاده نميكني؟
مجتبی یگانه 11 سال پیش

کد Hexadecimal میتونه الگوی خوبی برای شما باشه ، به این دلیل !

اگر شما هر کارکتر رو با یک مقدار عددی نشون بدید اون وقت احتمالا رشته ای با اشکال زیر خواهید داشت

 A - > 1 , Z - > 29 , a - > 30 , ...
30,11,22,44

یعنی باید از جداکننده استفاده کنید و رشته طولانی میشه و کاملا واضح هست که چه اتفاقی افتاده 

اما در الگوریتمی مثل Hex ما داریم

0 1 2 3 4 5 6 7 8 9 A B C D E F

و حالا شما می تونید داشته باشید

0 1 2 3 4 5 6 7 8 9 A B C D E F .... Z a b c d e f ... z

در این حالت هر کارکتری انگلیسی رو به کارکتر خاصی در فارسی نسبت بدید ، اعداد هم میتونید به همون شکل یا الگوی خاصی ذخیره کنید ، پس تا وقتی کسی آرایه ی کلید رو نداشته باشه ، نمیتونه به راحتی متن شما رو دیکد کنه ، مگر با روش های حرفه ای (اما سنتی رمزنگاری  ) که یکی از معروف ترین شون روش تعداد تکرار هست که معمولا 90 درصد رشته رو دیکد میکنه !

به نظر من بازم روش جالبی هست :)

نظرات

Hossein Kurd 11 سال پیش
ایشون می خوان عدد انتخابی خودشون رو قرار بدن و نه اعداد اینچنینی وگرنه از همون آرایه ساده استفاده می کردن
mehrlog 11 سال پیش

با سلام بهترین روش استفاده از dictionary میباشد.

 Map<String,int> dictionary = new HashMap<String,int>();

dictionary.put("key", value);

int value = dictionary.get("key");

//------------------

dictionary.put("ا", value);
dictionary.put("ب", value);
dictionary.put("پ", value);
dictionary.put("ت", value);
dictionary.put("ث", value);
dictionary.put("ج", value);

// به جاي value ها مقدار عددي را قرار بده

int value = dictionary.get("ب");

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .