জাভা: কমান্ড লাইনের আর্গুমেন্টগুলি বাতিল কিনা তা পরীক্ষা করুন


89

আমি আমার কমান্ড লাইনের যুক্তিগুলি পরীক্ষা করার জন্য কিছু ত্রুটি করতে চাইছি

public static void main(String[] args)
{
    if(args[0] == null)
    {
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    }
}

যাইহোক, এটি সীমা ব্যতিক্রমের বাইরে একটি অ্যারের ফেরত দেয়, যা বোঝা যায়। আমি কেবল সঠিক ব্যবহারের সন্ধান করছি।

উত্তর:


161

যুক্তি কখনও হতে পারে না null। তারা শুধু অস্তিত্ব আছে।

অন্য কথায়, আপনাকে যা করতে হবে তা হ'ল আপনার যুক্তিগুলির দৈর্ঘ্য পরীক্ষা করা।

public static void main(String[] args)
{
    // Check how many arguments were passed in
    if(args.length == 0)
    {
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    }
}

18

@ jjnguy এর উত্তর বেশিরভাগ ক্ষেত্রেই সঠিক। কমান্ড লাইন থেকে স্বাভাবিক ভাবে চালিত হয়ে অ্যাপ্লিকেশন চালিয়ে ডাকা হলে nullআপনি আর্গুমেন্ট অ্যারেতে (বা একটি nullঅ্যারে) কোনও স্ট্রিং দেখতে পাবেন না main

যাইহোক, যদি অ্যাপ্লিকেশনটির অন্য কোনও অংশ কোনও mainপদ্ধতি কল করে , এটি অনুমানযোগ্য যে এটি কোনও nullযুক্তি বা nullযুক্তির অ্যারে পাস করতে পারে ।

তবে (২) এটি স্পষ্টতই একটি অত্যন্ত অস্বাভাবিক ব্যবহারের ক্ষেত্র এবং এটি কোনও mainএন্ট্রি-পয়েন্ট পদ্ধতির জন্য নিযুক্ত চুক্তির গুরুতর লঙ্ঘন । অতএব, আমি মনে করি না যে আপনার nullমধ্যে আর্গুমেন্টের মানগুলি পরীক্ষা করা উচিত main। তারা ঘটে না এমন সম্ভাব্য ইভেন্টে, কলিং কোডটির জন্য এটি গ্রহণযোগ্য NullPointerException। সর্বোপরি, চুক্তি লঙ্ঘন করা কলারে একটি বাগ।


11

এই বিষয়টির প্রসারিত করতে:

এটা সম্ভব যে আরগস ভেরিয়েবল নিজেই বাতিল হয়ে যাবে, তবে সাধারণ সম্পাদনের মাধ্যমে নয়। java.exeকমান্ড লাইন থেকে এন্ট্রি পয়েন্ট হিসাবে সাধারণ সম্পাদন ব্যবহার করা হবে । তবে, আমি এমন কিছু প্রোগ্রাম দেখেছি যা জাভা.এক্সই পুরোপুরি বাইপাস করে C++JNI এর সাথে সংকলিত কোড ব্যবহার করে jvm.dll। এই ক্ষেত্রে, NULLপ্রধান পদ্ধতিতে পাস করা সম্ভব, এই ক্ষেত্রে আরোগুলি নালাগুলি হবে।

আমি সর্বদা পরীক্ষা করার পরামর্শ দিই if ((args == null) || (args.length == 0))বা if ((args != null) && (args.length > 0))আপনার প্রয়োজনের উপর নির্ভর করে।


0

আপনার জন্য পরীক্ষা করা উচিত (args == null || args.length == 0)। যদিও চেকটির nullসত্যই প্রয়োজন নেই, এটি একটি ভাল অনুশীলন।


4
অপ্রয়োজনীয় চেকগুলি ভাল অনুশীলন নয়। nullচেক অপ্রয়োজনীয়, কিন্তু আপনি সঠিক যে lengthচেক প্রয়োজন,
স্টিফেন সি

0

যদি আমি কমান্ড লাইনের যুক্তিগুলির কোনও স্পিফিকফিক পজিশনটি পাস করে কিনা তা পরীক্ষা করতে চাই তবে কীভাবে চেক করব? উদাহরণস্বরূপ, কিছু পরিস্থিতিতে 2 কমান্ড লাইন আরোগুলি পাস হবে এবং কিছুতে কেবল একটি পাস করা হবে তবে কীভাবে চাকাটি পরীক্ষা করবেন স্পিফিক কমনড লাইনটি পাস হয়েছে কিনা?

public class check {

public static void main(String[] args) {
if(args[0].length()!=0)
{
System.out.println("entered first if");
}
if(args[0].length()!=0 && args[1].length()!=0)
{
System.out.println("entered second if");
}
}
}

সুতরাং উপরের কোডে যদি আরোগুলি [1] পাস না করা হয় তবে আমি java.lang পেয়ে যাব ray

সুতরাং আমি কীভাবে এটি মোকাবিলা করব যেখানে আমি দ্বিতীয় তর্কটি পাস হয়েছে কিনা তা পরীক্ষা করে দেখতে পারি এবং যদি পাস হয়ে যায় তবে এটি প্রবেশ করান। asap সহায়তা প্রয়োজন।


এটি একটি প্রশ্ন করুন। যেহেতু এটি প্রশ্নের উত্তর দেয় না, এটি এখানে নেই। পরিবর্তে একটি প্রশ্ন জিজ্ঞাসা করে, আপনার কাছে উত্তর পাওয়ার আরও অনেক ভাল সুযোগ রয়েছে।
অ্যালেক্স এইচ

-10

আপনি যদি কোনও যুক্তি পাস না করেন তবে এমনকি সেই ক্ষেত্রে আরগগুলি শুরু হয় তবে কোনও আইটেম / উপাদান ছাড়াই। নিম্নলিখিতটি ব্যবহার করে দেখুন, আপনি একই প্রভাব পাবেন :

 
public static void main(String[] args) throws InterruptedException {
        String [] dummy= new String [] {};
        if(dummy[0] == null)
        {
            System.out.println("Proper Usage is: java program filename");
            System.exit(0);
        }

    }


4
এটি সম্পূর্ণ ভুল। কোনও অ্যাপ্লিকেশন যদি কোনও কমান্ড লাইন আর্গুমেন্ট ছাড়াই চালু করা হয়, mainপদ্ধতিটি এমন argsঅ্যারে দিয়ে কল করা হবে যার দৈর্ঘ্য শূন্য।
স্টিফেন সি

@ স্টেফেন ভিতরে কোনও উপাদান ছাড়াই একটি অ্যারের দৈর্ঘ্য শূন্য। তাহলে আমার উত্তর সম্পর্কে কি ভুল?
পুস্পেন্দু ব্যানার্জি

@ পুস্পেন্দু - কী ভুল তা dummy[0]সীমা ছাড় ব্যতিরেকে একটি অ্যারে সূচক ছুঁড়ে ফেলেছে !! আপনি যদি প্রোগ্রামটি (পিছনে) টেস্টিংয়ে পরিবর্তন করেন args[0]এবং কোনও যুক্তি ছাড়াই এটি চালান D
স্টিফেন সি

4
ঠিক আছে আমি এখন বুঝেছি. আপনি যদি আপনার প্রথম বাক্যটি ভুল টাইপ না করে থাকেন তবে এটি সহায়তা করবে। লিখিত হিসাবে এটি অনির্বচনীয়। আমি নোট করেছি যে আপনি চুপ করে আপনার শেষ মন্তব্যে এটি সংশোধন করেছেন। লুক্কায়িত।
স্টিফেন সি

4
"আমি কোনও সমাধান দেইনি বরং আমি বিষয়টি বর্ণনা করার চেষ্টা করেছি"। তাহলে কোনও উত্তর পোস্ট করবেন না। একটি মন্তব্য পোস্ট করুন.
স্টিলথ রাব্বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.