الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث عن كلمة في نص مع إهمال حروف التشكيل

بدأه herch في 21 يناير 2010 · 2 رد · 568 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لنفترض الجملة التالية

String phrase = "جُمْلَةٌ مَشْكُولَةٌ لَكِنْ مِنْ دُونِ مَعْنَى";

ولنفترض أننا نريد البحث عن الكلمة التالية

String wordToFind = "دون";

عند استعمال الطريقة indexOf أو الطريقة matches، فإنهما لا تجدان الكلمة. لماذا؟ لأنها ببساطة غير موجودة، فرموز التشكيل تعتبر حروف بحد ذاتها ويجب أخذها بعين الإعتبار.

phrase.indexOf(wordToFind);	//return -1
phrase.matches(wordToFind);	//return false

حسب المعيار unicode، فإن حروف التشكيل تبتدأ من الكود 064B وتنتهي عند الكود 0653.

يمكننا استغلال هاته النقطة بكتابة تعبير regex يأخد رموز التشكيل بعين الإعتبار. في التعبير، سنضع بعد كل حرف من الكلمة التي نبحث عنها التعبير التالي

 [\u064B-\u0653]?

والذي يعني أن كل حرف يمكن أن يكون متبوعا برمز للتشكيل.

public class SearchText {
	public static void main(String[] args) {
		String phrase = "جُمْلَةٌ مَشْكُولَةٌ لَكِنْ مِنْ دُونِ مَعْنَى";
		String wordToFind = "دون";
		char[] characters = wordToFind.toCharArray();
		StringBuilder patternString = new StringBuilder();
		for (int i = 0; i < characters.length; i++) {
			patternString.append(characters + "[\u064B-\u0653]?");
		}
		boolean match = phrase.matches(".*" + patternString.toString() + ".*");
		System.out.println(match);
	}
}

الطريقة matches تعيد فقط boolean. إذا أردنا استرجاع ال index الخاص بالكلمة، يمكن استعمال الفئتين Pattern و Matcher

Pattern pattern = Pattern.compile(patternString.toString());
Matcher matcher = pattern.matcher(phrase);
if (matcher.find()) {
	System.out.println(matcher.start());
}

النتيجة التي نحصل عليها هي 33، وهي مكان وجود الكلمة "دون" مع احتساب حروف التشكيل.

من لديه فكرة أفضل أو طريقة مباشرة فليشاركنا بها.

1
#2

والله رأيت الموضوع ظننت أنه سؤال دخلت لكى أرد ولم ألاحظ أن كاتب الموضوع هو مشرفنا الغالى herch

طبعا أنا لا أعرف جافا لكن كنت سأقول "استخدم التعابير المنتظمة" وهذا مافعلته أنت فعلا :wub:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3

أهلا بك :wub: نورت منتدى الجافا

مواضيع مشابهة