জাভা স্ট্রিং বিশ্লেষণ করতে বিভিন্ন পদ্ধতি কি কি?

প্লেয়ার কমান্ডগুলি পার্স করার জন্য, আমি প্রায়শই split পদ্ধতিটি একটি বিভাজক দ্বারা একটি স্ট্রিং বিভক্ত করা এবং তারপর তারপর একটি s বা সুইচ </> কোড> স্প্যানিশ ভাষায়। জাভা স্ট্রিং পার্সিং এর কিছু ভিন্ন উপায় কি?

0
ro fr hi
আমি মতামত ভিত্তিক থেকে এটি দূরে পরিবর্তন করার জন্য প্রশ্ন সম্পাদনা করার চেষ্টা করেছি, কিন্তু আমি উত্তর ইতিমধ্যে খুব opinionated হয় যে ভয়।
যোগ লেখক agweber, উৎস

14 উত্তর

স্পেসগুলিতে একটি সহজ স্ট্রিং টোকেনাইজার কাজ করতে হবে, তবে আপনি অনেক কিছু করতে পারেন যা আপনি করতে পারেন।

টোকেনাইজার ব্যবহার করে এখানে একটি উদাহরণ:

String command = "kick person";
StringTokenizer tokens = new StringTokenizer(command);
String action = null;

if (tokens.hasMoreTokens()) {
    action = tokens.nextToken();
}

if (action != null) {
    doCommand(action, tokens);
}

তারপর আর্গুমেন্ট জন্য টোকেন আরও ব্যবহার করা যেতে পারে। এই সব আর্গুমেন্টে কোন স্পেস ব্যবহার করা হয় অনুমান ... যাতে আপনি আপনার নিজস্ব সহজ পার্সিং প্রক্রিয়া রোল করতে চান (যেমন প্রথম হোয়াইট স্পেস পেয়ে এবং কর্মের আগে পাঠ্য ব্যবহার করে, অথবা যদি আপনি মনে করেন না একটি নিয়মিত এক্সপ্রেশন ব্যবহার গতি হিট), এটি শুধু বিমূর্ত আউট তাই এটি কোথাও ব্যবহার করা যেতে পারে।

0
যোগ
যতক্ষণ পর্যন্ত আমি মনে করি 'স্ট্রিংটোকাইনিওজার'টি স্থির করা হয় এবং এটি জেডিকে ডক্স দ্বারা এটি ব্যবহার না করার জন্য অত্যন্ত সুপারিশ করা হয়।
যোগ লেখক Ali Motevallian, উৎস

আমি মনে করি আপনি যতটা সম্ভব ক্ষমা হিসাবে কমান্ড ইন্টারফেস করতে চেষ্টা করছেন। এই ক্ষেত্রে যদি, আমি আপনাকে অনুরূপ একটি অ্যালগরিদম ব্যবহার সুপারিশ:

  1. Read in the string
    • Split the string into tokens
    • Use a dictionary to convert synonyms to a common form
    • For example, convert "hit", "punch", "strike", and "kick" all to "hit"
    • Perform actions on an unordered, inclusive base
    • Unordered - "punch the monkey in the face" is the same thing as "the face in the monkey punch"
    • Inclusive - If the command is supposed to be "punch the monkey in the face" and they supply "punch monkey", you should check how many commands this matches. If only one command, do this action. It might even be a good idea to have command priorities, and even if there were even matches, it would perform the top action.
0
যোগ

আমি সত্যিই নিয়মিত অভিব্যক্তি পছন্দ করি। যতক্ষণ কমান্ড স্ট্রিংগুলি মোটামুটি সহজ, আপনি কিছু regexes লিখতে পারেন যা কিছু পাতার কোড নিজে নিজে বিশ্লেষণ করতে পারে।

আমি আপনাকে সুপারিশ করার জন্য একটি ভাল ভূমিকা জন্য http://www.regular-expressions.info চেক আউট সুপারিশ করবে , পাশাপাশি জাভা জন্য নির্দিষ্ট উদাহরণ।

0
যোগ
আমি এই উত্তর হিসাবে গ্রহণ করতে ইচ্ছুক যদি কিছু উদাহরণ কোড newbies সাহায্য দেওয়া হয়।
যোগ লেখক agweber, উৎস
@ গৌরভ Vashishta, নিয়মিত এক্সপ্রেশন লেক্সিং এর জন্য উপযোগী হতে পারে কিন্তু এটি শুধুমাত্র পার্সিংয়ের প্রথম ধাপ ।
যোগ লেখক Mike Samuel, উৎস

@ কোডিং TheWheel আপনার কোডটি একটু পরিষ্কার করে এবং ইলোপেস ( ctrl + shift + f ) এবং এটি এখানে ঢোকানো হয়েছে :)

প্রতিটি লাইন সামনে চার স্পেস অন্তর্ভুক্ত।

public static boolean simpleNLP(String inputline, String keywords[]) {
    if (inputline.length() < 1)
        return false;

    List lexed = new ArrayList(); 
    for (String ele : inputline.split(" ")) {
        lexed.add(ele);
    }


    boolean status = false;
    to = 0;
    for (i = 0; i < lexed.size(); i++) {
        String s = (String) lexed.get(i);
        if (s.equalsIgnoreCase(keywords[to])) {
            to++;
            if (to >= keywords.length) {
                status = true;
                break;
            }
        }
    }
    return status;
}
0
যোগ

যখন কমান্ডের জন্য বিভাজক স্ট্রিং সর্বদা একই স্ট্রিং বা গৃহস্থালি (যেমন ";") আপনি recomend আপনি StrinkTokenizer বর্গ ব্যবহার:

স্ট্রিংটোকাইনিজার

কিন্তু যখন বিভাজক পরিবর্তিত হয় বা জটিল হয়, তখন আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করার জন্য recomend, যা স্ট্রিং ক্লাস নিজেই দ্বারা ব্যবহার করা যেতে পারে, পদ্ধতি বিভক্ত, 1.4 থেকে। এটি java.util.regex প্যাকেজ থেকে প্যাটার্ন ক্লাস ব্যবহার করে

প্যাটার্ন

0
যোগ

সূর্য নিজেই StringTokenizer থেকে দূরে থাকা এবং String.spilt পদ্ধতির পরিবর্তে ব্যবহার করার সুপারিশ করে।

আপনি প্যাটার্ন ক্লাস দেখতে চান।

0
যোগ

যদি আপনার পাঠ্যে কিছু সীমাবদ্ধতা থাকে তবে আপনি আপনার বিভক্ত পদ্ধতিতে পারেন যদি টেক্সটটিতে অনিয়মিত স্ট্রিং থাকে তবে এর মানে হল ভিন্ন কোড, তাহলে আপনাকে নিয়মিত এক্সপ্রেশন ব্যবহার করতে হবে।

0
যোগ

যদি ভাষা মৃত মত সহজ মত হয়

ক্রিয়া বিশেষ্য

তারপর হাত দ্বারা বিভাজন ভাল কাজ করে।

যদি এটি আরও জটিল হয়, তাহলে আপনি আসলে ANTLR বা JavaCC- এর মতো একটি সরঞ্জামের সন্ধান করতে হবে।

আমি http://javadude.com/articles/antlrtut যা আপনাকে এটি কিভাবে কাজ করে একটি ধারণা দেবে।

0
যোগ

ANTLR / ANTLRWorks জন্য অন্য ভোট। যদি আপনি ফাইলটির দুটি সংস্করণ তৈরি করেন, তবে জাভা কোডটি আসলে আসলে কমান্ড এক্সিকিউট করার জন্য এবং এক (শুধুমাত্র ব্যাকরণ সহ) ব্যতীত, তাহলে আপনার কাছে ভাষাটির এক্সিকিউটেবল স্পেসিফিকেশন রয়েছে, যা টেস্টিংয়ের জন্য চমৎকার, ডকুমেন্টেশনের জন্য একটি পুরষ্কার। , এবং একটি বড় timesaver যদি আপনি কখনও এটি পোর্ট করার সিদ্ধান্ত।

0
যোগ

জাভা জন্য জাভাসিসি একটি পার্সার জেনারেটর চেষ্টা করুন

এটি ভাষাকে ব্যাখ্যা করার জন্য অনেকগুলি বৈশিষ্ট্য রয়েছে এবং এটি Eclipse এ ভালভাবে সমর্থিত।

0
যোগ

পার্সিং ম্যানুয়ালি অনেক মজা ... শুরুতে :)

অনুশীলনের মধ্যে যদি কমান্ডগুলি খুব জটিল না হয় তবে আপনি তাদের একই ভাবে কমান্ড লাইনে ব্যাখ্যাকারী হিসাবে ব্যবহার করতে পারেন। লাইব্রেরিগুলির একটি তালিকা আছে যা আপনি ব্যবহার করতে পারেন: http://java-source.net/open -source / কম্যান্ড-লাইন । আমি মনে করি আপনি এপাচি কমন্সগুলি CLI বা args4j (টীকাগুলি ব্যবহার করে)। তারা ভাল নথিভুক্ত এবং ব্যবহারের জন্য সত্যিই সহজ। তারা স্বয়ংক্রিয়ভাবে প্যাডিং পরিচালনা করে এবং আপনাকে যা করতে হবে তা শুধুমাত্র একটি বস্তুর নির্দিষ্ট ক্ষেত্রগুলি পড়তে হবে।

যদি আপনার আরও উন্নতমানের কমান্ড থাকে তবে হয়তো একটি আনুষ্ঠানিক ব্যাকরণ তৈরি করা একটি ভাল ধারণা হতে পারে। ব্যাকরণগুলির জন্য গ্রাফিকাল সম্পাদক, ডিবাগার এবং দোভাষী সহ একটি খুব ভাল লাইব্রেরি রয়েছে। এটি ANTLR নামে পরিচিত (এবং সম্পাদক ANTLRWorks ) এবং এটি বিনামূল্যে :) এখানে কিছু উদাহরণ ব্যাকরণ এবং টিউটোরিয়াল রয়েছে।

0
যোগ

যদি এই কমান্ড লাইনগুলি বিশ্লেষণ করা হয় তবে আমি কমন্স ক্লি ব্যবহার করে সুপারিশ করব।

আপগাছ কমন্স CLI লাইব্রেরি প্রসেসিং কমান্ড লাইন ইন্টারফেসগুলির জন্য একটি API উপলব্ধ করে। ?

0
যোগ

JCommander seems quite good, although I have yet to test it.

0
যোগ

split method can split a string into an array of the specified substring expression regex. Its arguments in two forms, namely: split (String regex) and split (String regex, int limit), which split (String regex) is actually by calling split (String regex, int limit) to achieve, limit is 0. Then, when the limit> 0 and limit <0 represents what?

When the jdk explained: when limit> 0 sub-array lengths up to limit, that is, if possible, can be limit-1 sub-division, remaining as a substring (except by limit-1 times the character has string split end);

limit <0 indicates no limit on the length of the array;

limit = 0 end of the string empty string will be truncated. StringTokenizer class is for compatibility reasons and is preserved legacy class, so we should try to use the split method of the String class. refer to link

0
যোগ