জাভাতে প্রত্যয়টি ছাঁটাই করার সবচেয়ে কার্যকরী উপায় কী, এরকম:
title part1.txt
title part2.html
=>
title part1
title part2
জাভাতে প্রত্যয়টি ছাঁটাই করার সবচেয়ে কার্যকরী উপায় কী, এরকম:
title part1.txt
title part2.html
=>
title part1
title part2
উত্তর:
এটি কোডের বাছাই যা আমাদের নিজের করা উচিত নয়। জাগতিক জিনিসগুলির জন্য লাইব্রেরি ব্যবহার করুন, শক্ত স্টাফের জন্য আপনার মস্তিষ্ককে সংরক্ষণ করুন।
এই ক্ষেত্রে, আমি অ্যাপাচি কমন্স আইও থেকে ফাইলের নাম ইউটিলেস.রেমো এক্সটেনশন () ব্যবহার করার পরামর্শ দিচ্ছি
str.substring(0, str.lastIndexOf('.'))
if(str.contains("."))
str.substring(0, str.lastIndexOf('.'))
ব্যবহার String.substring
এবং String.lastIndex
একটি এক মাছ ধরার নৌকা ভাল কাজে, সেখানে নির্দিষ্ট কিছু ফাইল পাথ সঙ্গে মানিয়ে নিতে সক্ষম হচ্ছে পরিপ্রেক্ষিতে কিছু বিষয় আছে।
উদাহরণস্বরূপ নিম্নলিখিত পথটি ধরুন:
a.b/c
ওয়ান-লাইনার ব্যবহারের ফলাফল হবে:
a
এটা ভুল।
ফলাফলটি হওয়া উচিত ছিল c
, তবে যেহেতু ফাইলটির একটি এক্সটেনশনের অভাব ছিল, তবে সেই পথে .
নামের সাথে একটি ডিরেক্টরি ছিল , ওয়ান-লাইনার পদ্ধতিটিকে ফাইলের নাম হিসাবে পাথের অংশ দেওয়ার জন্য ট্রিক করা হয়েছিল, যা সঠিক নয়।
চেক প্রয়োজন
দ্বারা অনুপ্রাণিত skaffman এর উত্তর , আমি নিয়ে গবেষণা শুরু করেন FilenameUtils.removeExtension
পদ্ধতি এ্যাপাচি কমন্স আই ।
এর আচরণটি পুনরায় তৈরি করতে, আমি নতুন পদ্ধতিটি পূরণ করতে হবে এমন কয়েকটি পরীক্ষা লিখেছি, যা নিম্নলিখিত:
পথ ফাইল নাম -------------- -------- / বি / CC a / b / c.jpg গ a / b / c.jpg.jpg c.jpg AB / CC ab / c.jpg গ ab / c.jpg.jpg c.jpg সিসি c.jpg গ c.jpg.jpg c.jpg
(এবং আমি যা যা যা করেছি তার সবই - সম্ভবত অন্যান্য চেক রয়েছে যা আমি উপেক্ষা করেছি place
রুপায়ণ
removeExtension
পদ্ধতিটির জন্য আমার প্রয়োগটি নিম্নলিখিত :
public static String removeExtension(String s) {
String separator = System.getProperty("file.separator");
String filename;
// Remove the path upto the filename.
int lastSeparatorIndex = s.lastIndexOf(separator);
if (lastSeparatorIndex == -1) {
filename = s;
} else {
filename = s.substring(lastSeparatorIndex + 1);
}
// Remove the extension.
int extensionIndex = filename.lastIndexOf(".");
if (extensionIndex == -1)
return filename;
return filename.substring(0, extensionIndex);
}
removeExtension
উপরোক্ত পরীক্ষাগুলি সহ এই পদ্ধতিটি চালানো উপরের তালিকাভুক্ত ফলাফল দেয়।
পদ্ধতিটি নিম্নলিখিত কোড সহ পরীক্ষা করা হয়েছিল। যেহেতু এটি উইন্ডোতে চালিত হয়েছিল, পাথ বিভাজক একটি \
যা আক্ষরিক \
অংশ হিসাবে ব্যবহারের সাথে পালাতে হবে String
।
System.out.println(removeExtension("a\\b\\c"));
System.out.println(removeExtension("a\\b\\c.jpg"));
System.out.println(removeExtension("a\\b\\c.jpg.jpg"));
System.out.println(removeExtension("a.b\\c"));
System.out.println(removeExtension("a.b\\c.jpg"));
System.out.println(removeExtension("a.b\\c.jpg.jpg"));
System.out.println(removeExtension("c"));
System.out.println(removeExtension("c.jpg"));
System.out.println(removeExtension("c.jpg.jpg"));
ফলাফলগুলি ছিল:
c
c
c.jpg
c
c
c.jpg
c
c
c.jpg
ফলাফলটি পরীক্ষার মধ্যে বর্ণিত পছন্দসই ফলাফলগুলি পদ্ধতিটি পূরণ করা উচিত।
System.getProperty("file.separator")
এবং না শুধুমাত্র একটি বিশেষ কারণ আছে File.separator
?
/path/to/.htaccess
বিটিডাব্লু, আমার ক্ষেত্রে, যখন আমি একটি নির্দিষ্ট এক্সটেনশন সরানোর জন্য দ্রুত সমাধান চেয়েছিলাম, এটি প্রায় আমার কাজ:
if (filename.endsWith(ext))
return filename.substring(0,filename.length() - ext.length());
else
return filename;
String foo = "title part1.txt";
foo = foo.substring(0, foo.lastIndexOf('.'));
com.google.common.io.Files
শ্রেণিতে একটি পদ্ধতি ব্যবহার করুন যদি আপনার প্রকল্পটি ইতিমধ্যে গুগল কোর লাইব্রেরিতে নির্ভর করে। আপনার যে পদ্ধতিটি প্রয়োজন তা হ'ল getNameWithoutExtension
।
আমি কুলবার্ডের উত্তরটি বিশেষভাবে দরকারী বলে মনে করেছি।
তবে আমি শেষ ফলাফলের বিবৃতিগুলিতে পরিবর্তন করেছি:
if (extensionIndex == -1)
return s;
return s.substring(0, lastSeparatorIndex+1)
+ filename.substring(0, extensionIndex);
যেমন আমি চেয়েছিলাম পুরো পথের নামটি ফিরে আসুক।
সুতরাং "সি: \ ব্যবহারকারীগণ \ mroh004.COM \ নথি \ পরীক্ষা \ Test.xML" হয়ে যায় "সি: \ ব্যবহারকারীগণ ro mroh004.COM \ নথি \ পরীক্ষা \ পরীক্ষা" এবং না "টেস্ট"
filename.substring(filename.lastIndexOf('.'), filename.length()).toLowerCase();
একটি রেজেক্স ব্যবহার করুন। এটি সর্বশেষ বিন্দু এবং এর পরে সমস্ত কিছু প্রতিস্থাপন করে।
String baseName = fileName.replaceAll("\\.[^.]*$", "");
আপনি যদি রেজেক্স প্রাকপাইল করতে চান তবে আপনি একটি প্যাটার্ন অবজেক্টও তৈরি করতে পারেন।
স্ট্রিং ইমেজ পাথ সহ একটি নতুন ফাইল তৈরি করুন
String imagePath;
File test = new File(imagePath);
test.getName();
test.getPath();
getExtension(test.getName());
public static String getExtension(String uri) {
if (uri == null) {
return null;
}
int dot = uri.lastIndexOf(".");
if (dot >= 0) {
return uri.substring(dot);
} else {
// No extension.
return "";
}
}
org.apache.commons.io.FilenameUtils সংস্করণ 2.4 নিম্নলিখিত উত্তর দেয় gives
public static String removeExtension(String filename) {
if (filename == null) {
return null;
}
int index = indexOfExtension(filename);
if (index == -1) {
return filename;
} else {
return filename.substring(0, index);
}
}
public static int indexOfExtension(String filename) {
if (filename == null) {
return -1;
}
int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR);
int lastSeparator = indexOfLastSeparator(filename);
return lastSeparator > extensionPos ? -1 : extensionPos;
}
public static int indexOfLastSeparator(String filename) {
if (filename == null) {
return -1;
}
int lastUnixPos = filename.lastIndexOf(UNIX_SEPARATOR);
int lastWindowsPos = filename.lastIndexOf(WINDOWS_SEPARATOR);
return Math.max(lastUnixPos, lastWindowsPos);
}
public static final char EXTENSION_SEPARATOR = '.';
private static final char UNIX_SEPARATOR = '/';
private static final char WINDOWS_SEPARATOR = '\\';
private String trimFileExtension(String fileName)
{
String[] splits = fileName.split( "\\." );
return StringUtils.remove( fileName, "." + splits[splits.length - 1] );
}
আমি এটি করতে চাই:
String title_part = "title part1.txt";
int i;
for(i=title_part.length()-1 ; i>=0 && title_part.charAt(i)!='.' ; i--);
title_part = title_part.substring(0,i);
'' অবধি শেষ হচ্ছে। তারপরে সাবস্ট্রিং কল করুন।
সম্পাদনা করুন: গল্ফ হতে পারে না তবে এটি কার্যকর :)
কোনও ফাইল এক্সটেনশন নেই বা একাধিক ফাইল এক্সটেনশন নেই এমন পরিস্থিতিতে পরিস্থিতি মাথায় রেখে
উদাহরণস্বরূপ ফাইলের নাম: ফাইল | file.txt | file.tar.bz2
/**
*
* @param fileName
* @return file extension
* example file.fastq.gz => fastq.gz
*/
private String extractFileExtension(String fileName) {
String type = "undefined";
if (FilenameUtils.indexOfExtension(fileName) != -1) {
String fileBaseName = FilenameUtils.getBaseName(fileName);
int indexOfExtension = -1;
while (fileBaseName.contains(".")) {
indexOfExtension = FilenameUtils.indexOfExtension(fileBaseName);
fileBaseName = FilenameUtils.getBaseName(fileBaseName);
}
type = fileName.substring(indexOfExtension + 1, fileName.length());
}
return type;
}
String img = "example.jpg";
// String imgLink = "http://www.example.com/example.jpg";
URI uri = null;
try {
uri = new URI(img);
String[] segments = uri.getPath().split("/");
System.out.println(segments[segments.length-1].split("\\.")[0]);
} catch (Exception e) {
e.printStackTrace();
}
এটি img এবং imgLink উভয়ের জন্য আউটপুট উদাহরণ দেবে
public static String removeExtension(String file) {
if(file != null && file.length() > 0) {
while(file.contains(".")) {
file = file.substring(0, file.lastIndexOf('.'));
}
}
return file;
}
file.length() > 0
চেক পরিবেশন করে ?