diff --git a/hoot-core/src/main/cpp/hoot/core/util/StringUtils.cpp b/hoot-core/src/main/cpp/hoot/core/util/StringUtils.cpp
index 85ed7d7..59e4b96 100644
--- a/hoot-core/src/main/cpp/hoot/core/util/StringUtils.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/util/StringUtils.cpp
@@ -37,7 +37,7 @@
namespace hoot
{
-QString StringUtils::secondsToDhms(const qint64 durationInMilliseconds)
+QString StringUtils::millisecondsToDhms(const qint64 durationInMilliseconds)
{
QString res;
int duration = (int)(durationInMilliseconds / 1000);
@@ -87,6 +87,19 @@ bool StringUtils::hasDigit(const QString& input)
return false;
}
+bool StringUtils::isAlphaNumeric(const QString& input)
+{
+ for (int i = 0; i < input.length(); i++)
+ {
+ const QChar character = input.at(i);
+ if (!character.isLetterOrNumber())
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
bool StringUtils::isNumber(const QString& input)
{
bool isNumber = false;
@@ -148,4 +161,28 @@ void StringUtils::removeEmptyStrings(QStringList& strings)
strings = output;
}
+QSet<QString> StringUtils::getDuplicates(const QStringList& input)
+{
+ QSet<QString> duplicateStrings;
+ QSet<QString> uniqueStrings;
+ for (int i = 0; i < input.size(); i++)
+ {
+ const QString str = input.at(i);
+ if (uniqueStrings.contains(str))
+ {
+ duplicateStrings.insert(str);
+ }
+ else
+ {
+ uniqueStrings.insert(str);
+ }
+ }
+ return duplicateStrings;
+}
+
+bool StringUtils::containsSubstring(const QStringList& input, const QString& substring)
+{
+ return input.filter(substring, Qt::CaseInsensitive).size() > 0;
+}
+
}