float.TryParse not working and the string I'm trying to parse does not have a comma nor decimal - tryparse

if (!float.TryParse(tmp[0], System.Globalization.NumberStyles.Number, CultureInfo.CurrentCulture.NumberFormat, out Degrees))
{
this.ValidateCommandSyntaxErrorMessage = Constants.ArgumentTypeMismatch;
return false;
}
tmp[0] is "5"
I've also tried float.TryParse(tmp[0], out Degrees)
Both tries result in failure to parse

I figured this out. There were some special characters in the string which I only found by looping through each char in the string. Very strange problem. So to fix this I pass my text through a function to clean it up before trying to parse.
public static string CleanupInput(string input)
{
var sb = new StringBuilder();
Regex regex = new Regex(#"^\d$");
foreach (char c in input)
{
if (regex.IsMatch(c.ToString()) || c.ToString() == ".")
{
sb.Append(c.ToString());
}
}
return sb.ToString();
}

Related

how to transform string in integer in jaspersoft studio with the condition [duplicate]

How can I convert a String to an int?
"1234" → 1234
String myString = "1234";
int foo = Integer.parseInt(myString);
If you look at the Java documentation you'll notice the "catch" is that this function can throw a NumberFormatException, which you can handle:
int foo;
try {
foo = Integer.parseInt(myString);
}
catch (NumberFormatException e) {
foo = 0;
}
(This treatment defaults a malformed number to 0, but you can do something else if you like.)
Alternatively, you can use an Ints method from the Guava library, which in combination with Java 8's Optional, makes for a powerful and concise way to convert a string into an int:
import com.google.common.primitives.Ints;
int foo = Optional.ofNullable(myString)
.map(Ints::tryParse)
.orElse(0)
For example, here are two ways:
Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);
There is a slight difference between these methods:
valueOf returns a new or cached instance of java.lang.Integer
parseInt returns primitive int.
The same is for all cases: Short.valueOf/parseShort, Long.valueOf/parseLong, etc.
Well, a very important point to consider is that the Integer parser throws NumberFormatException as stated in Javadoc.
int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
//Will Throw exception!
//do something! anything to handle the exception.
}
try {
foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
//No problem this time, but still it is good practice to care about exceptions.
//Never trust user input :)
//Do something! Anything to handle the exception.
}
It is important to handle this exception when trying to get integer values from split arguments or dynamically parsing something.
Do it manually:
public static int strToInt(String str){
int i = 0;
int num = 0;
boolean isNeg = false;
// Check for negative sign; if it's there, set the isNeg flag
if (str.charAt(0) == '-') {
isNeg = true;
i = 1;
}
// Process each character of the string;
while( i < str.length()) {
num *= 10;
num += str.charAt(i++) - '0'; // Minus the ASCII code of '0' to get the value of the charAt(i++).
}
if (isNeg)
num = -num;
return num;
}
An alternate solution is to use Apache Commons' NumberUtils:
int num = NumberUtils.toInt("1234");
The Apache utility is nice because if the string is an invalid number format then 0 is always returned. Hence saving you the try catch block.
Apache NumberUtils API Version 3.4
Integer.decode
You can also use public static Integer decode(String nm) throws NumberFormatException.
It also works for base 8 and 16:
// base 10
Integer.parseInt("12"); // 12 - int
Integer.valueOf("12"); // 12 - Integer
Integer.decode("12"); // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8); // 10 - int
Integer.valueOf("12", 8); // 10 - Integer
Integer.decode("012"); // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16); // 18 - int
Integer.valueOf("12",16); // 18 - Integer
Integer.decode("#12"); // 18 - Integer
Integer.decode("0x12"); // 18 - Integer
Integer.decode("0X12"); // 18 - Integer
// base 2
Integer.parseInt("11",2); // 3 - int
Integer.valueOf("11",2); // 3 - Integer
If you want to get int instead of Integer you can use:
Unboxing:
int val = Integer.decode("12");
intValue():
Integer.decode("12").intValue();
Currently I'm doing an assignment for college, where I can't use certain expressions, such as the ones above, and by looking at the ASCII table, I managed to do it. It's a far more complex code, but it could help others that are restricted like I was.
The first thing to do is to receive the input, in this case, a string of digits; I'll call it String number, and in this case, I'll exemplify it using the number 12, therefore String number = "12";
Another limitation was the fact that I couldn't use repetitive cycles, therefore, a for cycle (which would have been perfect) can't be used either. This limits us a bit, but then again, that's the goal. Since I only needed two digits (taking the last two digits), a simple charAtsolved it:
// Obtaining the integer values of the char 1 and 2 in ASCII
int semilastdigitASCII = number.charAt(number.length() - 2);
int lastdigitASCII = number.charAt(number.length() - 1);
Having the codes, we just need to look up at the table, and make the necessary adjustments:
double semilastdigit = semilastdigitASCII - 48; // A quick look, and -48 is the key
double lastdigit = lastdigitASCII - 48;
Now, why double? Well, because of a really "weird" step. Currently we have two doubles, 1 and 2, but we need to turn it into 12, there isn't any mathematic operation that we can do.
We're dividing the latter (lastdigit) by 10 in the fashion 2/10 = 0.2 (hence why double) like this:
lastdigit = lastdigit / 10;
This is merely playing with numbers. We were turning the last digit into a decimal. But now, look at what happens:
double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2
Without getting too into the math, we're simply isolating units the digits of a number. You see, since we only consider 0-9, dividing by a multiple of 10 is like creating a "box" where you store it (think back at when your first grade teacher explained you what a unit and a hundred were). So:
int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"
And there you go. You turned a String of digits (in this case, two digits), into an integer composed of those two digits, considering the following limitations:
No repetitive cycles
No "Magic" Expressions such as parseInt
Methods to do that:
Integer.parseInt(s)
Integer.parseInt(s, radix)
Integer.parseInt(s, beginIndex, endIndex, radix)
Integer.parseUnsignedInt(s)
Integer.parseUnsignedInt(s, radix)
Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
Integer.valueOf(s)
Integer.valueOf(s, radix)
Integer.decode(s)
NumberUtils.toInt(s)
NumberUtils.toInt(s, defaultValue)
Integer.valueOf produces an Integer object and all other methods a primitive int.
The last two methods are from commons-lang3 and a big article about converting here.
Whenever there is the slightest possibility that the given String does not contain an Integer, you have to handle this special case. Sadly, the standard Java methods Integer::parseInt and Integer::valueOf throw a NumberFormatException to signal this special case. Thus, you have to use exceptions for flow control, which is generally considered bad coding style.
In my opinion, this special case should be handled by returning an empty Optional<Integer>. Since Java does not offer such a method, I use the following wrapper:
private Optional<Integer> tryParseInteger(String string) {
try {
return Optional.of(Integer.valueOf(string));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
Example usage:
// prints "12"
System.out.println(tryParseInteger("12").map(i -> i.toString()).orElse("invalid"));
// prints "-1"
System.out.println(tryParseInteger("-1").map(i -> i.toString()).orElse("invalid"));
// prints "invalid"
System.out.println(tryParseInteger("ab").map(i -> i.toString()).orElse("invalid"));
While this is still using exceptions for flow control internally, the usage code becomes very clean. Also, you can clearly distinguish the case where -1 is parsed as a valid value and the case where an invalid String could not be parsed.
Use Integer.parseInt(yourString).
Remember the following things:
Integer.parseInt("1"); // ok
Integer.parseInt("-1"); // ok
Integer.parseInt("+1"); // ok
Integer.parseInt(" 1"); // Exception (blank space)
Integer.parseInt("2147483648"); // Exception (Integer is limited to a maximum value of 2,147,483,647)
Integer.parseInt("1.1"); // Exception (. or , or whatever is not allowed)
Integer.parseInt(""); // Exception (not 0 or something)
There is only one type of exception: NumberFormatException
Converting a string to an int is more complicated than just converting a number. You have think about the following issues:
Does the string only contain numbers 0-9?
What's up with -/+ before or after the string? Is that possible (referring to accounting numbers)?
What's up with MAX_-/MIN_INFINITY? What will happen if the string is 99999999999999999999? Can the machine treat this string as an int?
We can use the parseInt(String str) method of the Integer wrapper class for converting a String value to an integer value.
For example:
String strValue = "12345";
Integer intValue = Integer.parseInt(strVal);
The Integer class also provides the valueOf(String str) method:
String strValue = "12345";
Integer intValue = Integer.valueOf(strValue);
We can also use toInt(String strValue) of NumberUtils Utility Class for the conversion:
String strValue = "12345";
Integer intValue = NumberUtils.toInt(strValue);
I'm have a solution, but I do not know how effective it is. But it works well, and I think you could improve it. On the other hand, I did a couple of tests with JUnit which step correctly. I attached the function and testing:
static public Integer str2Int(String str) {
Integer result = null;
if (null == str || 0 == str.length()) {
return null;
}
try {
result = Integer.parseInt(str);
}
catch (NumberFormatException e) {
String negativeMode = "";
if(str.indexOf('-') != -1)
negativeMode = "-";
str = str.replaceAll("-", "" );
if (str.indexOf('.') != -1) {
str = str.substring(0, str.indexOf('.'));
if (str.length() == 0) {
return (Integer)0;
}
}
String strNum = str.replaceAll("[^\\d]", "" );
if (0 == strNum.length()) {
return null;
}
result = Integer.parseInt(negativeMode + strNum);
}
return result;
}
Testing with JUnit:
#Test
public void testStr2Int() {
assertEquals("is numeric", (Integer)(-5), Helper.str2Int("-5"));
assertEquals("is numeric", (Integer)50, Helper.str2Int("50.00"));
assertEquals("is numeric", (Integer)20, Helper.str2Int("$ 20.90"));
assertEquals("is numeric", (Integer)5, Helper.str2Int(" 5.321"));
assertEquals("is numeric", (Integer)1000, Helper.str2Int("1,000.50"));
assertEquals("is numeric", (Integer)0, Helper.str2Int("0.50"));
assertEquals("is numeric", (Integer)0, Helper.str2Int(".50"));
assertEquals("is numeric", (Integer)0, Helper.str2Int("-.10"));
assertEquals("is numeric", (Integer)Integer.MAX_VALUE, Helper.str2Int(""+Integer.MAX_VALUE));
assertEquals("is numeric", (Integer)Integer.MIN_VALUE, Helper.str2Int(""+Integer.MIN_VALUE));
assertEquals("Not
is numeric", null, Helper.str2Int("czv.,xcvsa"));
/**
* Dynamic test
*/
for(Integer num = 0; num < 1000; num++) {
for(int spaces = 1; spaces < 6; spaces++) {
String numStr = String.format("%0"+spaces+"d", num);
Integer numNeg = num * -1;
assertEquals(numStr + ": is numeric", num, Helper.str2Int(numStr));
assertEquals(numNeg + ": is numeric", numNeg, Helper.str2Int("- " + numStr));
}
}
}
You can also begin by removing all non-numerical characters and then parsing the integer:
String mystr = mystr.replaceAll("[^\\d]", "");
int number = Integer.parseInt(mystr);
But be warned that this only works for non-negative numbers.
Google Guava has tryParse(String), which returns null if the string couldn't be parsed, for example:
Integer fooInt = Ints.tryParse(fooString);
if (fooInt != null) {
...
}
Apart from the previous answers, I would like to add several functions. These are results while you use them:
public static void main(String[] args) {
System.out.println(parseIntOrDefault("123", 0)); // 123
System.out.println(parseIntOrDefault("aaa", 0)); // 0
System.out.println(parseIntOrDefault("aaa456", 3, 0)); // 456
System.out.println(parseIntOrDefault("aaa789bbb", 3, 6, 0)); // 789
}
Implementation:
public static int parseIntOrDefault(String value, int defaultValue) {
int result = defaultValue;
try {
result = Integer.parseInt(value);
}
catch (Exception e) {
}
return result;
}
public static int parseIntOrDefault(String value, int beginIndex, int defaultValue) {
int result = defaultValue;
try {
String stringValue = value.substring(beginIndex);
result = Integer.parseInt(stringValue);
}
catch (Exception e) {
}
return result;
}
public static int parseIntOrDefault(String value, int beginIndex, int endIndex, int defaultValue) {
int result = defaultValue;
try {
String stringValue = value.substring(beginIndex, endIndex);
result = Integer.parseInt(stringValue);
}
catch (Exception e) {
}
return result;
}
As mentioned, Apache Commons' NumberUtils can do it. It returns 0 if it cannot convert a string to an int.
You can also define your own default value:
NumberUtils.toInt(String str, int defaultValue)
Example:
NumberUtils.toInt("3244", 1) = 3244
NumberUtils.toInt("", 1) = 1
NumberUtils.toInt(null, 5) = 5
NumberUtils.toInt("Hi", 6) = 6
NumberUtils.toInt(" 32 ", 1) = 1 // Space in numbers are not allowed
NumberUtils.toInt(StringUtils.trimToEmpty(" 32 ", 1)) = 32;
You can use new Scanner("1244").nextInt(). Or ask if even an int exists: new Scanner("1244").hasNextInt()
You can use this code also, with some precautions.
Option #1: Handle the exception explicitly, for example, showing a message dialog and then stop the execution of the current workflow. For example:
try
{
String stringValue = "1234";
// From String to Integer
int integerValue = Integer.valueOf(stringValue);
// Or
int integerValue = Integer.ParseInt(stringValue);
// Now from integer to back into string
stringValue = String.valueOf(integerValue);
}
catch (NumberFormatException ex) {
//JOptionPane.showMessageDialog(frame, "Invalid input string!");
System.out.println("Invalid input string!");
return;
}
Option #2: Reset the affected variable if the execution flow can continue in case of an exception. For example, with some modifications in the catch block
catch (NumberFormatException ex) {
integerValue = 0;
}
Using a string constant for comparison or any sort of computing is always a good idea, because a constant never returns a null value.
In programming competitions, where you're assured that number will always be a valid integer, then you can write your own method to parse input. This will skip all validation related code (since you don't need any of that) and will be a bit more efficient.
For valid positive integer:
private static int parseInt(String str) {
int i, n = 0;
for (i = 0; i < str.length(); i++) {
n *= 10;
n += str.charAt(i) - 48;
}
return n;
}
For both positive and negative integers:
private static int parseInt(String str) {
int i=0, n=0, sign=1;
if (str.charAt(0) == '-') {
i = 1;
sign = -1;
}
for(; i<str.length(); i++) {
n* = 10;
n += str.charAt(i) - 48;
}
return sign*n;
}
If you are expecting a whitespace before or after these numbers,
then make sure to do a str = str.trim() before processing further.
For a normal string you can use:
int number = Integer.parseInt("1234");
For a String builder and String buffer you can use:
Integer.parseInt(myBuilderOrBuffer.toString());
Simply you can try this:
Use Integer.parseInt(your_string); to convert a String to int
Use Double.parseDouble(your_string); to convert a String to double
Example
String str = "8955";
int q = Integer.parseInt(str);
System.out.println("Output>>> " + q); // Output: 8955
String str = "89.55";
double q = Double.parseDouble(str);
System.out.println("Output>>> " + q); // Output: 89.55
int foo = Integer.parseInt("1234");
Make sure there is no non-numeric data in the string.
Here we go
String str = "1234";
int number = Integer.parseInt(str);
print number; // 1234
I am a little bit surprised that nobody mentioned the Integer constructor that takes String as a parameter.
So, here it is:
String myString = "1234";
int i1 = new Integer(myString);
Java 8 - Integer(String).
Of course, the constructor will return type Integer, and an unboxing operation converts the value to int.
Note 1: It's important to mention: This constructor calls the parseInt method.
public Integer(String var1) throws NumberFormatException {
this.value = parseInt(var1, 10);
}
Note 2: It's deprecated: #Deprecated(since="9") - JavaDoc.
Use Integer.parseInt() and put it inside a try...catch block to handle any errors just in case a non-numeric character is entered, for example,
private void ConvertToInt(){
String string = txtString.getText();
try{
int integerValue=Integer.parseInt(string);
System.out.println(integerValue);
}
catch(Exception e){
JOptionPane.showMessageDialog(
"Error converting string to integer\n" + e.toString,
"Error",
JOptionPane.ERROR_MESSAGE);
}
}
It can be done in seven ways:
import com.google.common.primitives.Ints;
import org.apache.commons.lang.math.NumberUtils;
String number = "999";
Ints.tryParse:
int result = Ints.tryParse(number);
NumberUtils.createInteger:
Integer result = NumberUtils.createInteger(number);
NumberUtils.toInt:
int result = NumberUtils.toInt(number);
Integer.valueOf:
Integer result = Integer.valueOf(number);
Integer.parseInt:
int result = Integer.parseInt(number);
Integer.decode:
int result = Integer.decode(number);
Integer.parseUnsignedInt:
int result = Integer.parseUnsignedInt(number);
This is a complete program with all conditions positive and negative without using a library
import java.util.Scanner;
public class StringToInt {
public static void main(String args[]) {
String inputString;
Scanner s = new Scanner(System.in);
inputString = s.nextLine();
if (!inputString.matches("([+-]?([0-9]*[.])?[0-9]+)")) {
System.out.println("Not a Number");
}
else {
Double result2 = getNumber(inputString);
System.out.println("result = " + result2);
}
}
public static Double getNumber(String number) {
Double result = 0.0;
Double beforeDecimal = 0.0;
Double afterDecimal = 0.0;
Double afterDecimalCount = 0.0;
int signBit = 1;
boolean flag = false;
int count = number.length();
if (number.charAt(0) == '-') {
signBit = -1;
flag = true;
}
else if (number.charAt(0) == '+') {
flag = true;
}
for (int i = 0; i < count; i++) {
if (flag && i == 0) {
continue;
}
if (afterDecimalCount == 0.0) {
if (number.charAt(i) - '.' == 0) {
afterDecimalCount++;
}
else {
beforeDecimal = beforeDecimal * 10 + (number.charAt(i) - '0');
}
}
else {
afterDecimal = afterDecimal * 10 + number.charAt(i) - ('0');
afterDecimalCount = afterDecimalCount * 10;
}
}
if (afterDecimalCount != 0.0) {
afterDecimal = afterDecimal / afterDecimalCount;
result = beforeDecimal + afterDecimal;
}
else {
result = beforeDecimal;
}
return result * signBit;
}
}
One method is parseInt(String). It returns a primitive int:
String number = "10";
int result = Integer.parseInt(number);
System.out.println(result);
The second method is valueOf(String), and it returns a new Integer() object:
String number = "10";
Integer result = Integer.valueOf(number);
System.out.println(result);
public static int parseInt(String s)throws NumberFormatException
You can use Integer.parseInt() to convert a String to an int.
Convert a String, "20", to a primitive int:
String n = "20";
int r = Integer.parseInt(n); // Returns a primitive int
System.out.println(r);
Output-20
If the string does not contain a parsable integer, it will throw NumberFormatException:
String n = "20I"; // Throws NumberFormatException
int r = Integer.parseInt(n);
System.out.println(r);
public static Integer valueOf(String s)throws NumberFormatException
You can use Integer.valueOf(). In this it will return an Integer object.
String n = "20";
Integer r = Integer.valueOf(n); // Returns a new Integer() object.
System.out.println(r);
Output-20
References
https://docs.oracle.com/en/

Convert all Solidworks files in folder to step files macro

I was searching around and looking for a macro that will when run it will convert the files in the location into .stp files and I came across the below. how can i manipulate it to grab the next file in the folder and continue the next files and convert them until all the files have been converted.
Dim swApp As Object
Dim Part As Object
Dim FilePath As String
Dim sFilePath As String
Dim PathSize As Long
Dim PathNoExtention As String
Dim NewFilePath As String
Dim FileLocation As String
Dim sPath As String
Dim i As Long
Dim bRebuild As Boolean
Dim bRet As Boolean
Dim sRev As String
Dim nErrors As Long
Dim nWarnings As Long
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
FilePath = Part.GetPathName
PathSize = Strings.Len(FilePath)
sPath = Left(Part.GetPathName, InStrRev(Part.GetPathName, "\"))
sRev = Part.CustomInfo("re") 'Change Configuration Property name here
FileLocation = "C:"
PathNoExtension = Strings.Left(FilePath, PathSize - 7)
Part.SaveAs (PathNoExtension & "rev" & sRev & ".step")
End Sub
You could do this a few different ways if you're not using a VB6 Macro. If you use a .NET Macro (Visual Basic or C#), they support .NET libraries which makes this process quite simple. I've created the following Console Application in C#. You could create the same thing as a .NET Macro in SolidWorks. The important thing to add to the example you provided is the foreach statement which will iterate over all of the files in the directory and only perform the translation on SolidWorks Parts or Assemblies.
using SolidWorks.Interop.sldworks;
using System;
using System.IO;
namespace CreateStepFiles
{
class Program
{
static SldWorks swApp;
static void Main(string[] args)
{
string directoryName = GetDirectoryName();
if (!GetSolidWorks())
{
return;
}
int i = 0;
foreach (string fileName in Directory.GetFiles(directoryName))
{
if (Path.GetExtension(fileName).ToLower() == ".sldprt")
{
CreateStepFile(fileName, 1);
i += 1;
}
else if (Path.GetExtension(fileName).ToLower() == ".sldasm")
{
CreateStepFile(fileName, 2);
i += 1;
}
}
Console.WriteLine("Finished converting {0} files", i);
}
static void CreateStepFile(string fileName, int docType)
{
int errors = 0;
int warnings = 0;
ModelDoc2 swModel = swApp.OpenDoc6(fileName, docType, 1, "", ref errors, ref warnings);
string stepFile = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName), ".STEP");
swModel.Extension.SaveAs(stepFile, 0, 1, null, ref errors, ref warnings);
Console.WriteLine("Created STEP file: " + stepFile);;
swApp.CloseDoc(fileName);
}
static string GetDirectoryName()
{
Console.WriteLine("Directory to Converty");
string s = Console.ReadLine();
if (Directory.Exists(s))
{
return s;
}
Console.WriteLine("Directory does not exists, try again");
return GetDirectoryName();
}
static bool GetSolidWorks()
{
try
{
swApp = (SldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));
if (swApp == null)
{
throw new NullReferenceException(nameof(swApp));
}
if (!swApp.Visible)
{
swApp.Visible = true;
}
Console.WriteLine("SolidWorks Loaded");
return true;
}
catch (Exception)
{
Console.WriteLine("Could not launch SolidWorks");
return false;
}
}
}
}

Method listDuplicates() error

Can somebody help me with this problem here. I'm a newbie . I'm trying to find file duplicates or files with the same content in a directory and write texfile to display duplicates but now it says input string was not in a correct format
public static List<FileInfo> files = new List<FileInfo>();
public static void ListDrive(string drive)
{
try
{
DirectoryInfo di = new DirectoryInfo(drive);
foreach (FileInfo fi in di.GetFiles())
{
files.Add(fi);
}
}
catch (UnauthorizedAccessException)
{ }
}
//Find duplicates
public static void ListDuplicates()
{
var duplicatedFiles = files.GroupBy(x => new { x.Length }).Where(t => t.Count() > 1).ToList();
Console.WriteLine("Total items: {0}", files.Count);
Console.WriteLine("Probably duplicates {0} ", duplicatedFiles.Count());
StreamWriter duplicatesFoundLog = new StreamWriter("log.txt");
foreach (var filter in duplicatedFiles)
{
duplicatesFoundLog.WriteLine("Probably duplicated item: Name: { 0}, Length: { 1}",
filter.Key.Length);
var items = files.Where(x => x.Length == filter.Key.Length).ToList();
int c = 1;
foreach (var suspected in items)
{
duplicatesFoundLog.WriteLine("{3},{ 0}- { 1}, Creation date { 2}",
suspected.Name, suspected.FullName, suspected.CreationTime, c);
c++;
}
duplicatesFoundLog.WriteLine();
}
duplicatesFoundLog.Flush();
duplicatesFoundLog.Close();
}
Here is my client method that invokes the two methods
try
{
Console.WriteLine("Enter the path");
string path = Console.ReadLine();
ListDrive(path);
ListDuplicates();
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
}
Your help will be high appreciated...
Please eliminate the space, for example change { 0} to {0}. If you do this for all locations the error should go away.
If you want spaces, make the code "{3}, {0}- {1}, Creation date {2}". i.e. Add the space before the opening {, not after. The format items need have no space after the first opening brace to be interpreted as a formatting item correctly.

java characters upper and lower case

Each character should switch between upper and lower case. My issue is that I cannot get it to work properly. This is what I have so far:
oneLine = br.readLine();
while (oneLine != null){ // Until the line is not empty (will be when you reach End of file)
System.out.println (oneLine); // Print it in screen
bw.write(oneLine); // Write the line in the output file
oneLine = br.readLine(); // read the next line
}
int ch;
while ((ch = br.read()) != -1){
if (Character.isUpperCase(ch)){
Character.toLowerCase(ch);
}
bw.write(ch);
}
Here you go. You had a few problems:
You were never actually storing the result of the character case switch.
You needed to save the line return with each row
I broke out the case switch to make it easier to read
Here's the modified code:
public static void main(String args[]) {
String inputfileName = "input.txt"; // A file with some text in it
String outputfileName = "output.txt"; // File created by this program
String oneLine;
try {
// Open the input file
FileReader fr = new FileReader(inputfileName);
BufferedReader br = new BufferedReader(fr);
// Create the output file
FileWriter fw = new FileWriter(outputfileName);
BufferedWriter bw = new BufferedWriter(fw);
// Read the first line
oneLine = br.readLine();
while (oneLine != null) { // Until the line is not empty (will be when you reach End of file)
String switched = switchCase(oneLine); //switch case
System.out.println(oneLine + " > "+switched); // Print it in screen
bw.write(switched+"\n"); // Write the line in the output file
oneLine = br.readLine(); // read the next line
}
// Close the streams
br.close();
bw.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
public static String switchCase(String string) {
String r = "";
for (char c : string.toCharArray()) {
if (Character.isUpperCase(c)) {
r += Character.toLowerCase(c);
} else {
r += Character.toUpperCase(c);
}
}
return r;
}

temperature calculator

Hi i am suppose to make a Temperature calculator that will accept either Celsius or perimeter and convert that temperature to the other scale. If a Celsius temperature is entered it will be converted to Fahrenheit and vice versa.
Instructions:
For this you will have to design and code a method to convert one temperature scale to another and return the result. This single method should take two arguments, one for the temperature value to convert and a second indicating which temperature scale to convert to.
Your method should be coded so that it could be accessed by another class or application. Also, make sure there is only one return statement in your method.
So far i have created this code but it showing me 2 small errors and i don't know how to fix them.
**error 1. Constant value '67' cannot be converted to a 'char'
error 2. Constant value '70' cannot be converted to a 'char'**
namespace Lab7
{
public partial class frmTemperatureConverter : Form
{
public frmTemperatureConverter()
{
InitializeComponent();
}
private void txtValueToConver_TextChanged(object sender, EventArgs e)
{
}
private void btnConvert_Click(object sender, EventArgs e)
{
char chr;
string str1;
string str2;
object[] objArray;
if (this.txtConvert.Text != "")
{
double num1 = double.Parse(this.txtConvert.Text);
if (this.radCelsius.Checked)
{
chr = 67;
str1 = "farenheit";
str2 = "celsius";
}
else
{
chr = 70;
str1 = "celsius";
str2 = "farenheit";
}
double num2 = Math.Round(this.ConvertTemperature(num1, chr), 2);
this.lblResult.Text = string.Concat(new object[] { num1, " ", str1, " converts to ", num2, " ", str2 });
}
else
{
this.lblResult.Text = "Please enter a numeric temperature to convert.";
this.txtConvert.Focus();
}
}
public double ConvertTemperature(double inTemp, char toScale)
{
double num;
if (toScale == 70)
{
num = inTemp * 1.80 + 32.00;
}
else
{
if (toScale == 67)
{
num = (inTemp - 32.00) / 1.80;
}
else
{
num = inTemp;
}
}
return num;
}
private void btnClear_Click(object sender, EventArgs e)
{
this.txtConvert.Text = "";
this.lblResult.Text = "";
this.txtConvert.Focus();
this.radCelsius.Checked = true;
}
private void btnExit_Click(object sender, EventArgs e)
{
base.Close();
}
}
}
The problem is that 67 and 70 are not characters -- they are integers.
The simplest thing would to make the variable "chr" an integer. Then you should probably change its name too -- perhaps to "toScale" -- the same as the parameter name.
Or you could leave the variable "chr" as a char, and use the values 'C' instead of 67 and 'F' instead of 70. This method makes it easier to understand the program, too.
The Problem are those lines:
char chr;
chr = 67;
chr = 70;
chr ist of type char, so you need to cast this number to char:
chr = (char)67;